Вот фрагмент кода, который я использовал для преобразования грузинского юникода в его латинский эквивалентный текст.
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 имеет пару байтов.
для лучшего объяснения вот изображение прилагается
unicodeBytes
четные индексы имеют значения, представляющие букву, которую вы хотите декодировать. Первая буква грузинского алфавита начиналась с 208 и заканчивалась на 240 (всего 33). поэтому, если значение unicodeBytes
находилось в диапазоне [208; 240], я должен был использовать строковый массив charset
, чтобы получить латинский эквивалент, в противном случае значение unicodeBytes
представляло собой просто код символа.
Я не знаю, есть ли для него библиотека, но этот метод даст вам основную идею, как написать свой собственный конвертер.