Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将UTF-8阿拉伯字母转换为代码页1001?_C#_.net_Encoding_Character Encoding_Codepages - Fatal编程技术网

C# 如何将UTF-8阿拉伯字母转换为代码页1001?

C# 如何将UTF-8阿拉伯字母转换为代码页1001?,c#,.net,encoding,character-encoding,codepages,C#,.net,Encoding,Character Encoding,Codepages,我有一个支持代码页1001阿拉伯语的Star Micronics TSP,如何使用C#将UTF-8转换为特定的代码页 更新:我发现代码页864与打印机兼容,我尝试发送十六进制值,得到了正确的字符 myPrinter.PrintNormal(PrinterStation.Receipt, "\xFE8D"); 我尝试了以下方法将字符串转换为代码页864: Encoding enc = Encoding.GetEncoding(864); byte[] arr = enc.GetBytes("الس

我有一个支持代码页1001阿拉伯语的Star Micronics TSP,如何使用C#将UTF-8转换为特定的代码页

更新:我发现代码页864与打印机兼容,我尝试发送十六进制值,得到了正确的字符

myPrinter.PrintNormal(PrinterStation.Receipt, "\xFE8D");
我尝试了以下方法将字符串转换为代码页864:

Encoding enc = Encoding.GetEncoding(864);
byte[] arr = enc.GetBytes("السلام");
我在编码后得到的字节arr值是
{63,63,63,63,63,63}
,它的值是错误的,甚至字节计数也是错误的,因为它是双字节字符。

未测试,但是:

String s = Encoding.UTF8.GetString(bytes);
Encoding enc = Encoding.GetEncoding(1001);
byte[] arr2 = enc.GetBytes(s);
当然,如果您实际上是以字符串开头,请跳过第一行,但是因为您提到UTF-8,所以我假设为二进制


显然,对于大数据量,您可能会使用
文本阅读器
/
文本阅读器
(每个都带有编码),但想法是一样的。

我不认为最初提出问题的人仍然需要答案,但这条线索似乎非常有名,我不希望任何人浪费时间来找到我在艰难的道路上发现的东西。

这个答案主要依赖于Star Micronics TSP打印机提供的应用程序

要点: -参考“Interop.OposPOSPrinter_CCO.dll” -打印机对象的类型应为oposposprinter.printer,并以稍微不同的方式初始化(与opos.net相比) -字符代码作为字符串发送,并且有一个变量告诉打印机对象使用这些十进制数字作为字符代码

带有简单阿拉伯字母转换器的VB.net项目示例可在


注意:我没有时间讨论其余的字母/数字

我遇到以下运行时错误,“没有数据可用于编码1001”@Asbi如果无法识别,您可能需要查看encoding.GetEncodings()以查看是否有“足够接近”(可能是10004?)。如果其他所有操作都失败,请找到1001的规范并手动编码。@Absi但这只是Unicode。你试过UTF-16吗(有两个,大端和小端)?好吧,我想我们太接近了,当我对输入进行编码时,每个字母有2个字节,比如说第二个字母有{06,46}。。现在,我如何将它改回字符串并作为一个字母发送到打印机?@Absi-switch-endianness;如果使用
.Unicode
切换到
.bigendianencode
等。这将为您提供先前版本的0x0627等。然而,这仍然是一个字符。角色!=字节。您能指出哪一组字节对于您给定的输入是正确的吗?@Absi,代码页864是一种传统的8位基本阿拉伯语编码。这是行不通的。63是问号字符,这意味着编码器无法转换字符。另外,您能否在代码页1001上提供引文?你确定它存在并且你得到了正确的数字吗?@Marc在我能正确回答你之前,我需要一种方法来迭代十六进制值,并将它们发送给打印机,以查看每个十六进制产生的结果。一个非常接近该输入的字节集是{x0627,x0646,x0633,x0646,x0627,x0647}@bzlm它的打印机配置实用程序表示支持1001阿拉伯语和864阿拉伯语,所以当我将打印机设置为代码页864并向它们发送上面的十六进制值时,它会打印阿拉伯语,但我如何自动编码these@Absi“代码页”通常指在ASCII码上使用第8位;至少在“代码页”术语中,2字节映射是不寻常的。像bzlm一样,我正在努力寻找1001上的任何参考资料