Как преобразовать данные в кодировке Юникод в текст деванагри (хинди) - PullRequest
3 голосов
/ 14 июля 2011

Я получаю SMS-сообщения в сценарии деванагри (хинди) со своего мобильного телефона в настольную программу, но он отображает данные в кодировке (например, - 091A09470924002009240924), которую я обнаружил в кодировке Unicode. Существует ли существующая библиотека, которая позволит мне преобразовать это в текст на хинди? Если нет, то как мне написать метод для этого? Я использую C #.

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Вот фрагмент кода, который я использовал для преобразования грузинского юникода в его латинский эквивалентный текст.

string[] charset = new string[33] { "a", "b", "g", "d", "e", "v", "z", "T", "i", "k", "l", "m", "n", "o", "p", "J", "r", "s","t", "u", "f", "q", "R", "y", "S", "C", "c", "Z", "w", "W", "x", "j", "h" };
string unicodeString = "აბ, - გდ";
string latin_string = "";
byte[] unicodeBytes = Encoding.Unicode.GetBytes(unicodeString);
for (int p = 0; p < unicodeBytes.Length / 2; p++)
{
if (unicodeBytes[p * 2] > 207 && unicodeBytes[p * 2] < 241)
latin_string += charset[unicodeBytes[p * 2] - 208];
else
latin_string += Convert.ToChar(unicodeBytes[p * 2]).ToString();
}

объясняя только необходимую часть:

Encoding.Unicode.GetBytes(unicodeString); возвращает массив байтов, длина этого массива равна 2 * unicodeString.Length. так что каждое письмо от unicodestring имеет пару байтов. для лучшего объяснения вот изображение прилагается enter image description here

unicodeBytes четные индексы имеют значения, представляющие букву, которую вы хотите декодировать. Первая буква грузинского алфавита начиналась с 208 и заканчивалась на 240 (всего 33). поэтому, если значение unicodeBytes находилось в диапазоне [208; 240], я должен был использовать строковый массив charset, чтобы получить латинский эквивалент, в противном случае значение unicodeBytes представляло собой просто код символа.

Я не знаю, есть ли для него библиотека, но этот метод даст вам основную идею, как написать свой собственный конвертер.

1 голос
/ 14 июля 2011

Использовать класс System.Text.Encoding.У него есть метод GetChars (byte []).И, возможно, вам понадобится соответствующий шрифт, поскольку некоторые символы хинди могут быть написаны несколькими способами.

0 голосов
/ 14 июля 2011

Спасибо за ответы, они помогли мне найти точное решение - http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/12a3558d-fe48-44fd-840e-03facfd9c944

...