Преобразование строки Unicode в символы Unicode в С# для индийских языков

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

например: язык тамильский

"கமலி"=>'க','ம','லி'

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

byte[] stringBytes = Encoding.Unicode.GetBytes("கமலி");
char[] stringChars = Encoding.Unicode.GetChars(stringBytes);
foreach (var crt in stringChars)
 {
     Trace.WriteLine(crt);
 }

это дает результат как:

'க'=>0x0b95

'ம'=>0x0bae

'ல'=>0x0bb2

'ி'=>0x0bbf

Итак, здесь проблема заключается в том, как разделить символ 'லி' как 'லி' без разделения на 'ல', 'ி'.

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

Все, что мне нужно разделить на 3 символа.


person arun kumar non ascii    schedule 20.12.2012    source источник
comment
Что ты имеешь в виду, как лишить персонажа...? Можете ли вы показать, какой результат вы ожидаете?   -  person Alexei Levenkov    schedule 20.12.2012
comment
разве вы не видите символ «லி», как «லி». без разделения, как «ல», «ி».   -  person arun kumar non ascii    schedule 20.12.2012
comment
unicode.org/charts/PDF/U0B80.pdf Читать это... Консорциум Unicode разработал его таким образом.   -  person Uthistran Selvaraj    schedule 20.12.2012
comment
что бы я не спрашивал о там дизайн. Я прошу разделить строку Unicode на символы Unicode, поскольку это индийский язык   -  person arun kumar non ascii    schedule 20.12.2012
comment
Я вижу, что эти 2 Char отображаются как один глиф или лигатура - не знаю какая... Но все равно непонятно, чего вы хотите. Я подозреваю, что ответ скрыт в описании Char и StringInfo но вам нужно отредактировать свой вопрос, чтобы его было легче понять.   -  person Alexei Levenkov    schedule 20.12.2012


Ответы (1)


Для перебора графем можно использовать методы класса StringInfo.

Каждая комбинация базового символа + комбинированных символов называется «текстовым элементом» в документации .NET, и вы можете перебирать их с помощью TextElementEnumerator:

var str = "கமலி";
var enumerator = System.Globalization.StringInfo.GetTextElementEnumerator(str);
while (enumerator.MoveNext())
{
    Console.WriteLine(enumerator.Current);
}

Выход:

க
ம
லி
person porges    schedule 20.12.2012