Как получить десятичное представление символов в Юникоде в строке, содержащей текст на хинди? - PullRequest
1 голос
/ 05 мая 2011

Я использую Visual Studio 2010 в C # для преобразования текста в Unicodes. Как у меня есть строка abc = "मेरा". в этой строке 4 символа. Мне нужны все четыре символа Юникода. Пожалуйста, помогите мне.

Ответы [ 5 ]

3 голосов
/ 05 мая 2011

Поскольку .Net char является символом Unicode (по крайней мере, для точки кода BMP), вы можете просто перечислить все символы в строке:

var abc = "मेरा";

foreach (var c in abc)
{
    Console.WriteLine((int)c);
}

, что приведет

2350
2375
2352
2366
2 голосов
/ 05 мая 2011

Когда вы пишете код типа string abc= "मेरा";, у вас уже есть код Unicode (в частности, UTF-16), поэтому вам не нужно ничего преобразовывать. Если вы хотите получить доступ к единичным символам, вы можете сделать это с помощью обычного индекса: например, abc[1] равно (гласный DEVANAGARI ЗНАК E).

Если вы хотите увидеть числовые представления этих символов, просто приведите их к целым числам. Например

abc.Select(c => (int)c)

дает последовательность чисел 2350, 2375, 2352, 2366. Если вы хотите увидеть шестнадцатеричное представление этих чисел, используйте ToString():

abc.Select(c => ((int)c).ToString("x4"))

возвращает последовательность строк «092e», «0947», «0930», «093e».

Обратите внимание, что когда я произносил числовые представления, я фактически имел в виду их кодирование с использованием UTF-16. Для символов в Базовая многоязычная плоскость это то же самое, что и их кодовая точка Unicode. Подавляющее большинство используемых символов лежат в BMP, включая тех 4 хинди символов, которые представлены здесь.

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

byte[] bytes = Encoding.UTF32.GetBytes(abc);

int codePointCount = bytes.Length / 4;

int[] codePoints = new int[codePointCount];

for (int i = 0; i < codePointCount; i++)
    codePoints[i] = BitConverter.ToInt32(bytes, i * 4);

Поскольку UTF-32 кодирует все (21-битные) кодовые точки напрямую, это даст вам их. (Возможно, есть более простое решение, но я его не нашел.)

1 голос
/ 05 мая 2011

Если у вас есть строка s = मेरा, то у вас уже есть ответ.

Эта строка содержит четыре кодовые точки в BMP, которые в UTF-16 представлены 8 байтами.Вы можете получить к ним доступ по индексу с помощью s[i], с циклом foreach и т. Д.

Если вам нужны 8 байтов, вы можете получить к ним следующий доступ:

string str = @"मेरा";
byte[] arr = System.Text.UnicodeEncoding.GetBytes(str);
1 голос
/ 05 мая 2011

Если вы пытаетесь преобразовать файлы из устаревшей кодировки в Unicode:

Прочитайте файл, указав правильную кодировку исходных файлов, затем запишите файл, используя нужный Unicodeсхема кодирования.

    using (StreamReader reader = new StreamReader(@"C:\MyFile.txt", Encoding.GetEncoding("ISCII")))
    using (StreamWriter writer = new StreamWriter(@"C:\MyConvertedFile.txt", false, Encoding.UTF8))
    {
        writer.Write(reader.ReadToEnd());
    }

Если вы ищете отображение символов деванагари в кодовые точки Unicode:

Диаграмму можно найти по Консорциум Unicode веб-сайт здесь .

Обратите внимание, что кодовые точки Unicode традиционно записываются в шестнадцатеричном формате.Таким образом, вместо десятичного числа 2350 кодовая точка будет записана как U + 092E, а на кодовой диаграмме она обозначена как 092E.

1 голос
/ 05 мая 2011

используйте

System.Text.Encoding.UTF8.GetBytes(abc)

, который будет возвращать ваши значения Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...