Переносимый способ обработки UTF-8 строк в C++ |
Функция |
Описание |
utf8::append |
Кодирует 32 битовое представление кодовой точки (code point) в UTF-8 последовательность октетов и добавляет эту последовательность к UTF-8 строке. |
utf8::next |
В качестве параметра получает ссылку на итератор начала UTF-8 последовательности, возвращает 32-х битовое представление кодовой точки и перемещает итератор на начало следующей UTF-8 последовательности. |
utf8::peek_next |
Аналогично utf8::next, но не изменяет позицию итератора. |
utf8::prior |
В качестве параметра получает итератор на любой октет в UTF-8 последовательности, перемещает итератор на начало предыдущий UTF-8 последовательности, возвращает 32-х битовое представление кодовой точки. Эту функцию можно применять для нахождения начала UTF-8 последовательности, имея случайную позицию в строке. |
utf8::advance |
Перемещает итератор на указанное количество кодовых точек. Перемещение допустимо только в сторону увеличения итератора. |
utf8::distance |
Возвращает количество кодовых точек между двумя итераторами. |
utf8::utf16to8 |
Перекодирует строку из UTF-16 в UTF-8 |
utf8::utf8to16 |
Перекодирует строку из UTF-8 в UTF-16 |
utf8::utf32to8 |
Перекодирует строку из UTF-32 в UTF-8 |
utf8::utf8to32 |
Перекодирует строку из UTF-8 в UTF-32 |
utf8::find_invalid |
Возвращает итератор на первую найденную, неправильную, последовательность в UTF-8 строке. |
utf8::is_valid |
Определяет, является ли указанная последовательность октетов правильной UTF-8 строкой. Вызов функции аналогичен коду find_invalid(start, end) == end. |
utf8::replace_invalid |
Заменяет указным значением, в UTF-8 строке, все неправильные последовательности. |
utf8::is_bom |
Определяет, является ли указанная последовательность октетов маркером порядка байтов (BOM). |
#include <iostream> #include <string> #include <string.h> #include "utf8.h" // подключаем библиотеку using namespace std; template<typename in_iterator> void print_symbols(in_iterator begin, in_iterator end) { const size_t sizeSimbol = 5; char Symbol[sizeSimbol] = {0, 0, 0, 0, 0}; uint32_t cp; while (begin < end) { memset(Symbol, 0, sizeSimbol); cp = utf8::next(begin, end); utf8::append(cp, Symbol); cout << "[" << Symbol << "]"; } cout << endl; } int main(int ac, char* av[]) { const char *str_char = "Привет Мир!!!!"; string str_std = str_char; cout << "Длинна str_char в байтах:" << strlen(str_char); cout << " Символов в str_char:"; cout << utf8::distance(str_char, str_char+strlen(str_char)); cout << endl; cout << "Длинна str_std в байтах:" << str_std.length(); cout << " Символов в str_std:"; cout << utf8::distance(str_std.begin(), str_std.end()); cout << endl; print_symbols(str_std.begin(), str_std.end()); print_symbols(str_char, str_char + strlen(str_char)); return 0; }
Длинна str_char в байтах:23 Символов в str_char:14 Длинна str_std в байтах:23 Символов в str_std:14 [П][р][и][в][е][т][ ][М][и][р][!][!][!][!] [П][р][и][в][е][т][ ][М][и][р][!][!][!][!]
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |