2013-06-08 2 views
1

У меня есть строка: ‰ € <† ... ‰‰‰;Преобразование текста в символы на иврите C# winform Кодировка

Я хочу отобразить его в текстовом поле, но с его ивритским значением.

Я знаю, что это ивритская строка, но что-то с кодировкой задает результат для строки, которую вы видите.

Как я могу преобразовать его в свой код, чтобы я мог видеть его на иврите.

Я пробовал:

string a = " ‰€‹†… ‰‰‰ " ; 
string b = " âìéåï " ; // this string works. 
Encoding latinEncoding = Encoding.GetEncoding("Windows-1252"); 
Encoding hebrewEncoding = Encoding.GetEncoding("Windows-1255"); 
byte[] latinBytes = latinEncoding.GetBytes(a); 
string hebrewString = hebrewEncoding.GetString(latinBytes); 
textBox1.Text = hebrewString; 

Дело в том, что, если строка была б, она работает. но все мои строки - это как.

+0

Вы можете изменить отображение шрифта местного языка. Он отлично работает –

+0

Вы уверены, что '' ‰ € <† ... ‰‰‰ "' является латинской кодировкой? –

+0

Нет короля. Если я открою файл с помощью блокнота, я получаю строку a. Если я открою файл с помощью ultraedit, я получу стимул b. Когда я прочитал содержимое файла с помощью своего кода, я получаю строку a. И поэтому мое преобразование не работает. – subirshan

ответ

2

Ваша строка не кодируется в windows-1255 кодирования, он кодируется в code page 862, иногда называют MS-DOS Hebrew, так что код должен быть:

Encoding hebrewEncoding = Encoding.GetEncoding(862); 
+0

спасибо. Он отображает значение иврита, но с буквами в противоположном направлении. Я имею в виду от конца до начала. Любые идеи Почему? – subirshan

+0

Кажется, что исходная строка находится в визуальном порядке, а не в логической, вероятно, из старой системы. Поскольку окна знают, что иврит должен быть рендерен RTL, он снова переворачивается. Если ваш вход всегда будет простой строкой на иврите, вы можете перевернуть его, иначе вам, вероятно, придется использовать реализацию алгоритма, используемого для преобразования логического в визуальный текст (называемого BiDi). Поскольку это преобразование является функцией от нескольких до одного, обратное преобразование может быть неверным, но тот же алгоритм правильно изменит простой ввод. Для .NET Единственная сторонняя сторона, которую я нашел, это: nbidi.sf.net – argaz