在 ESC/POS 命令中选择字符代码表
Posted
技术标签:
【中文标题】在 ESC/POS 命令中选择字符代码表【英文标题】:Selecting character code table in ESC/POS command 【发布时间】:2019-02-22 17:19:13 【问题描述】:我需要在打印收据上打印非英文字符,使用热敏 POS 收据打印机。 Xprinter XP-58III 热敏 POS 收据打印机支持通用 ESC/POS 命令。
据我所知,这应该通过设置字符代码表来完成。就我而言,目标代码页是 21。
用于设置 Code Page 的 ESC/POS 命令为 'ESC t n'
(ASCII) 或 '1B 74 n'
(Hex),其中 'n' 为字符码表的第 n 页。
我使用十六进制形式的命令:我将“21”转换为十六进制值,或者我应该使用这个数字而不进行转换,即'1B 74 21'
?
另外,应该在哪里添加thnis命令,就在初始化代码之后?
0x1B 0x40 0x1B 0x74 0x21
我使用十六进制编辑器在二进制文件中添加/编辑 ESC/POS 代码。
编辑:我自己解决了这个问题。为了在POS收据打印机上打印任何非英文字符,我们必须满足两个条件:1)设置正确的Code Page,以及2)在收据文件或POS软件中设置相应的编码(与Code Page相同的编码) .此 POS 打印机型号的正确代码页是 25 [WPC1257]。
【问题讨论】:
【参考方案1】:我自己解决了这个问题:问题出在错误的代码页集中。此 POS 打印机的正确代码页是 25 [WPC1257]。我们还在收据文件中设置了相应的编码(与Code Page相同的编码)。
【讨论】:
【参考方案2】:第 21 页将是“Thai Character Code 11”,其中 21 以十进制表示,您需要以二进制表示 "0x15"
。然后命令看起来像"0x1B 0x74 0x15"
。
关于命令位置,ESC/POS 命令在原地执行并影响其后的一般情况。你把它放在初始化命令之后可能没有问题。试试看吧。
【讨论】:
在我的例子中(XP-58III 打印机),代码页 21 是拉脱维亚语。 '21' 十进制是 0x15 十六进制,所以我在初始化后尝试了命令0x1B 0x74 0x15
,但它不起作用。为什么指定0x18
代替0x1B
?
抱歉我的错误:0x18
是一个错字,0x1B
是正确的 ESC。即使您将0x15
指定为字符代码,我仍然不明白您的命令不起作用的原因。以上是关于在 ESC/POS 命令中选择字符代码表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 中向热敏打印机发送 ESC/POS 命令
如何在 Android 上使用 Python 通过蓝牙发送 ESC 打印命令?