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

C# 在c语言的自定义代码表中将阿拉伯语转换为十六进制的最佳方法#,c#,encoding,character-encoding,hex,arabic,C#,Encoding,Character Encoding,Hex,Arabic,我目前正在开发一个新的程序来打印包含阿拉伯文本的收据。打印机可以处理这些字符,但使用特殊的代码表来打印它们。因此,发送到打印机的所有信息必须为十六进制。发送到打印机的信息可以混合使用阿拉伯语和非阿拉伯语字符 代码表在这里(第133页) 例如,ق=E7,ك=E8 使用标准十六进制转换(如下所示),前128个拉丁字母数字字符工作正常,但阿拉伯语显示为问号 byte[] ba = Encoding.Default.GetBytes(textBox1.Text); var hexstring = Bit

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

代码表在这里(第133页)

例如,ق=E7,ك=E8

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

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

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

自己回答这个问题,以防其他人有类似的问题

因此,该场景试图将阿拉伯语字符发送到TM-T88iV爱普生打印机。首先,您需要TM-T88V或更高版本来支持阿拉伯语

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

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

最后,您需要更改打印机的内部代码表。为此,我使用了TM-T88V实用程序()。我相信您也可以通过串行发送的直接命令来实现这一点,但事实证明它太复杂了

祈祷这一切现在都能成功。快乐印刷