Как конвертировать арабские буквы UTF-8 в CodePage 1001? - PullRequest
3 голосов
/ 24 июля 2011

У меня есть Star Micronics TSP, который поддерживает CodePage 1001 арабский язык, как мне преобразовать UTF-8 в эту конкретную кодовую страницу с помощью C #?

Обновление: я обнаружил, что CodePage 864 совместим с принтером, я попытался отправить шестнадцатеричные значения и получил правильный символ,

myPrinter.PrintNormal(PrinterStation.Receipt, "\xFE8D");

Я попробовал следующее для преобразования строки в codePage 864:

Encoding enc = Encoding.GetEncoding(864);
byte[] arr = enc.GetBytes("السلام");

значения байтовых массивов, которые я получаю после кодирования, равны {63,63,63,63,63,63}, что неверно по значению, и даже число байтов неверно, потому что это двухбайтовый символ.

Ответы [ 2 ]

5 голосов
/ 24 июля 2011

Не проверено, но:

String s = Encoding.UTF8.GetString(bytes);
Encoding enc = Encoding.GetEncoding(1001);
byte[] arr2 = enc.GetBytes(s);

Конечно, пропустите первую строку, если вы действительно начинаете со строки, но так как вы упомянули UTF-8, я предположил двоичный файл.

Очевидно, что для больших объемов данных вы могли бы вместо этого использовать TextReader / TextWriter (каждый с кодировкой) - но та же идея.

0 голосов
/ 27 октября 2012

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

этот ответ зависит главным образом от приложения, поставляемого с принтером Star Micronics TSP

ключевые моменты: - ссылка "Interop.OposPOSPrinter_CCO.dll" - объект принтера должен иметь тип oposposprinter.printer и инициализироваться немного другим способом (по сравнению с opos.net) - коды символов отправляются в виде строки, и существует переменная, которая указывает объекту принтера использовать эти десятичные числа в качестве кодов символов

пример проекта VB.net с простым конвертером арабских букв можно найти по адресу https://bitbucket.org/loody/arabic-1001/overview

примечание: у меня нет времени, чтобы покрыть остальные буквы / цифры

...