在 c# 中的自定义代码 table 中将阿拉伯语转换为十六进制的最佳方法

Best way to convert arabic to hex in custom code table in c#

我目前正在开发一个新程序来打印包含阿拉伯语文本的收据。打印机可以处理这些字符,但使用特殊代码 table 来打印它们。因此,所有发送到打印机的信息都必须是十六进制的。发送到打印机的信息可以混合使用阿拉伯字符和非阿拉伯字符。

代码table在这里(第133页http://support.epostraders.co.uk/support-files/documents/3/dwY-TM-T88V_TechRefGuide.pdf

例如,ق = E7,ك = E8

使用标准的十六进制转换(如下),前 128 个拉丁字母数字字符工作正常,但阿拉伯语显示为问号。

byte[] ba = Encoding.Default.GetBytes(textBox1.Text);
var hexstring = BitConverter.ToString(ba);

有人对转换为正确十六进制的最佳方法有什么建议吗?

我自己回答这个问题,以防其他人遇到类似问题。

所以这个场景试图将阿拉伯字符发送到 TM-T88iV Epson 打印机。首先,您需要 TM-T88V 或更高版本才能支持阿拉伯语。

其次,必须使用 Write 命令将字符作为字节发送到打印机,而不是作为 WriteLine 中的字符串。 Write 命令需要以 CRLF 终止,以便打印机进行打印。打印机没有从右到左的功能,所以发送到打印机的字节需要先反转:Array.Reverse(byte[])

为了 visual studio 将阿拉伯字符转换为正确的十六进制值,您需要更改 windows 代码 table。这通常在控制面板 > 区域和语言 > 管理 > 非 unicode 语言中完成。 Windows 英国的默认值为 850。阿拉伯语 (U.A.E) 为 720。您可以通过 运行 cmd 并键入 chcp 仔细检查。事实证明,阿拉伯语 U.A.E 720 不正确,你需要 1256。我在控制面板中找不到匹配的语言,所以我在 cmd 中使用手动更改它命令 'chcp 1256'

最后,您需要更改打印机的内部代码table。为此,我使用了 TM-T88V 实用程序 (https://download.epson-biz.com/modules/pos/index.php?page=single_soft&cid=4100&pcat=3&scat=42)。我相信你也可以通过串行发送的直接命令来做到这一点,但事实证明它太繁琐了。

祝你好运,现在应该一切正常了。打印愉快。