дотнет 4.0 и регистрпровайдер - PullRequest
0 голосов
/ 22 февраля 2019

Запишите этот код

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

для кодирования арабских слов ("رقم الفاتورة"), но выдается исключение

{"Нет данных для кодирования 1001. Для информациипри определении пользовательской кодировки см. документацию по методу Encoding.RegisterProvider. "}

Я использую dotnet 4.0.10.0, но я не могу найти этот метод Encoding.RegisterProvider Из-за этой кодовой страницымой термопринтер?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Добавьте пакет System.Text.Encoding.CodePages nuget и зарегистрируйте провайдера кодирования перед вашим кодом, что решит проблему.

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

Также вы можете получить правильную кодировку от здесь

0 голосов
/ 22 февраля 2019

В соответствии со списком кодировок нет 1001.

Вам нужно не только знать язык, но и использовать фактическую кодировку текста.Для арабского языка их больше одного.

Используете ли вы 1001, потому что это Win32 LCID для других локалей?Это неправильно: 1. идентификаторы кодирования не имеют ничего общего с идентификаторами локали (оба не рекомендуются в пользу имен, потому что существует слишком много вариантов обоих, чтобы быть полезными мнемоническими);и 2. в действительности это не 1001, это 0x0101, что составляет 256.)

PS.Encoding.RegisterProvider определенно задокументировано (и существует с .NET 4.6 - помните, что CLR-версия времени выполнения не является фреймворковой версией.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...