在 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 打印命令?

C# ESC/POS 打印越南语

小票打印ESC/POS命令集

在 android 上如何使用支持 ESC/POS 命令集的 USB 打印机?

ESC/POS 热敏打印机 UTF-8 字符集设置