dotnet 4.0和registerprovider

问题描述 投票:0回答:2

写下这段代码

 byte[] arr2 = Encoding.GetEncoding(1001).GetBytes(st);

用于编码阿拉伯语单词(“发票编号”),但它会抛出异常

{“没有数据可用于编码1001.有关定义自定义编码的信息,请参阅Encoding.RegisterProvider方法的文档。”}

我正在使用dotnet 4.0.10.0但是没有找到这个方法Encoding.RegisterProvider因为我的热敏打印机而需要这个代码页?

c# character-encoding thermal-printer
2个回答
1
投票

根据list of encodings,没有1001。

您不仅要了解语言,还要了解所使用的实际文本编码。阿拉伯语不止一个。

您使用的是1001,因为它是针对Ar-ly语言环境的Win32 LCID吗?这是错误的:1。编码id与locale id无关(两者都不赞成使用名称,因为有太多的变体都有助于使用助记符); 2. ar-ly不是1001,它是0x0101,即256.)

PS。 Encoding.RegisterProvider肯定是documented(并且自.NET 4.6以来就存在 - 请记住CLR的运行时版本不是框架版本。)


0
投票

添加System.Text.Encoding.CodePages nuget包并在代码之前注册编码提供程序,这将解决问题。

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
// your code
byte[] arr2 = Encoding.GetEncoding(1001).GetBytes(st);

您也可以从here获得正确的编码

© www.soinside.com 2019 - 2024. All rights reserved.