Преобразование китайских символов в Unicode - PullRequest
5 голосов
/ 26 августа 2010

Допустим, у меня есть случайный китайский символ, 玩. Я хочу преобразовать его в Unicode, который будет U + 73A9. Как я мог сделать это в C #?

Ответы [ 3 ]

5 голосов
/ 26 августа 2010

Возьмите myChar как символ, ссылающийся на ваш специальный символ ...

Console.WriteLine("{0} U+{1:x4} {2}", myChar, (int)myChar, (int)myChar);

Выше мы выводим сам символ, за которым следует кодовая точка Unicode, а затем целочисленное значение.

Сократить строку формата и параметры для вывода только кода "U + ..." ...

Console.WriteLine("U+{0:x4}", (int)myChar);
2 голосов
/ 26 августа 2010

Символ 玩 находится в Юникоде.

Если он есть в C # как 玩, то в настоящее время он находится в UTF-16, который является одной из форм кодировки Unicode.

Если выполучить его откуда-то еще, вам нужно:

  1. Найти кодировку, в которой он находится.
  2. Получить байты (хорошо переносится потоком).
  3. Начните писать соответствующий кодировщик.
  4. Используйте кодировщик, чтобы получить строку (обертывание красивого потока с помощью текстового считывателя лучше).

Шаг 3 Может быть просто (о, япросто используйте это!) или трудно (черт возьми, придется написать сам!) или где-то посередине (эй, кто-нибудь уже написал один из них?!)

0 голосов
/ 26 августа 2010

Немного более длинный пример, который следует за образцом в ответе Джона Ханны:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UnicodeDecodeConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            char c = '\u73a9';
            char[] chars = {c};
            Encoding encoding = Encoding.BigEndianUnicode;
            byte[] decodeds = encoding.GetBytes(chars);
            StringBuilder stringBuilder = new StringBuilder("U+");
            foreach (byte decoded in decodeds)
            {
                stringBuilder.Append(decoded.ToString("x2"));
            }
            Console.WriteLine(stringBuilder);
            Console.ReadLine();
        }
    }
}

- Йерун

...