Как получить Unicode для строк Chracter (UTF-8) на языке c или c ++ (Linux) - PullRequest
4 голосов
/ 25 марта 2011

Я работаю над одним приложением, в котором мне нужно знать символы Юникода, чтобы классифицировать их как китайские иероглифы, японские иероглифы (кандзи, катакана, хирагана), латынь, греческий и т. Д.

Данная строка в формате UTF-8.

Есть ли способ узнать Unicode для символа UTF-8? Например:

  1. Символ '≠' имеет значение Unicode U + 2260.
  2. Символ '建' имеет значение U + 5EFA в Юникоде.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Кодировка utf-8 - это кодировка переменной ширины Юникода. Каждая кодовая точка Юникода может быть закодирована от одного до четырех char.

Чтобы декодировать строку char* и извлечь одну кодовую точку, вы читаете один байт. Если установлен самый старший бит, кодовая точка кодируется из нескольких символов, в противном случае это кодовая точка Unicode. Количество установленных битов, считая от старшего значащего бита, указывает, сколько char используется для кодирования кодовой точки Unicode.

Эта таблица объясняет, как сделать преобразование:

UTF-8 (char*)                       | Unicode (21 bits)
------------------------------------+--------------------------
0xxxxxxx                            | 00000000000000000xxxxxxx
------------------------------------+--------------------------
110yyyyy 10xxxxxx                   | 0000000000000yyyyyxxxxxx
------------------------------------+--------------------------
1110zzzz 10yyyyyy 10xxxxxx          | 00000000zzzzyyyyyyxxxxxx 
------------------------------------+--------------------------
11110www 10zzzzzz 10yyyyyy 10xxxxxx | 000wwwzzzzzzyyyyyyxxxxxx

Исходя из этого, код относительно прост для написания. Если вы не хотите писать это, вы можете использовать библиотеку, которая выполняет преобразование для вас. В Linux доступно много: libiconv , icu , glib , ...

1 голос
/ 25 марта 2011

libiconv может помочь вам преобразовать строку utf-8 в utf-16 или utf-32.Utf-32 был бы наиболее приемлемым вариантом, если вы действительно хотите поддерживать все возможные коды Unicode.

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