2013-07-26 3 views
0

Я пытаюсь создать набор вспомогательных функций для декодирования и модификации многобайтовых utf-8 строк. Например, найти количество символов в строке и найти смещение байта для определенного символа.Как декодировать многобайтную строку utf8? (C++)

Я искал какое-то решение, но не смог понять это. Если бы кто-нибудь мог показать мне кросс-платформу и переносной способ сделать это, только используя STL , я был бы очень признателен. Также, если есть способ C++ 11, я тоже к этому открыт.

+0

http://site.icu-project.org/ –

+3

Stack Overflow предназначен для ответа на конкретные вопросы о проблемах, с которыми вы действительно сталкиваетесь с кодом code_, не делая для вас кода –

+0

см. Инструкции utf8everywhere.org –

ответ

2

Вы должны прочитать и изучить страницу Википедии на UTF-8, кодировка ясно описана thereL https://en.wikipedia.org/wiki/UTF-8

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

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

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

Я не думаю, что есть какие-либо функции STL, которые помогают в этом, кроме вашего базового std::string::const_iterator.

Что касается нестандартных библиотек, я рекомендую использовать библиотеку unicode, например ICU, или вместо того, чтобы писать код самостоятельно. Библиотеки .Net вроде бы работают, если вы осторожны, но я не думаю, что Windows имеет другие API-интерфейсы, которые могут помочь в этом.