You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Out-Printer将ASCII 0x1B转为0x2E的原因咨询

问题原因及解决方法

核心原因

PowerShell的Out-Printer cmdlet并非直接向打印机端口发送原始字节,而是通过Windows打印子系统传递内容。即便使用Generic/Text Only驱动,打印子系统仍可能对字符串中的控制字符(如ESC 0x1B)进行转码或替换——这里0x1B被转换成了ASCII码0x2E(英文句号.),导致最终发送到COM9的内容变成2e 63。

而VB.NET和PuTTY是直接与COM端口建立原始字节流连接,绕过了Windows打印子系统的字符处理逻辑,因此能正确发送1B 63。

解决办法

要在PowerShell中直接发送原始控制指令到打印机端口,需绕过Out-Printer,直接操作串口或端口路径:

  1. 使用.NET的System.IO.Ports.SerialPort类发送原始字节:
$port = New-Object System.IO.Ports.SerialPort("COM9", 9600, "None", 8, "One")
$port.Open()
$port.Write([byte[]]@(0x1B, 0x63), 0, 2)
$port.Close()

注意:需根据打印机实际参数调整波特率、奇偶校验等配置

  1. 直接写入打印机端口路径:
$portPath = "\\.\COM9"
$fileStream = [System.IO.File]::OpenWrite($portPath)
$fileStream.Write([byte[]]@(0x1B, 0x63), 0, 2)
$fileStream.Close()

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:25:58