.NET 4.0 和 Encoding.RegisterProvider 方法

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

我写了这段代码

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

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

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

我正在使用.NET 4.0.10.0,但我找不到该方法

Encoding.RegisterProvider()
。由于我的热敏打印机,我需要此代码页。

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

根据编码列表没有1001。

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

您使用 1001 是因为它是 ar-ly 语言环境的 Win32 LCID 吗?这是错误的: 1. 编码 id 与区域设置 id 无关(两者均已弃用,取而代之的是名称,因为两者的变体太多,无法有效助记); 2. ar-ly 不是 1001,而是 0x0101,即 256。)

PS。

Encoding.RegisterProvider
肯定是有记录的(并且自 .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);

您也可以从这里

获得正确的编码
© www.soinside.com 2019 - 2024. All rights reserved.