Использование Unicode (UTF-8) в C ++ - PullRequest
0 голосов
/ 07 декабря 2018

В настоящее время мне приходится иметь дело с Unicode в C ++ 11 (среда Linux).UTF-8 используется в качестве кодировки по умолчанию.Задачи, которые мне нужны:

  • Заменить.
  • Regex
  • Итерация по строке UTF-8.Я не знаю, будет ли использование std :: string и «for (символ c: s)» делать то, что я хочу, потому что каждый символ должен быть символом Unicode.Например, ế - это один символ, ма - это слово, содержащее 3 символа
  • Подстрока.
  • Объединенная подстрока с символами Unicode или объединенными символами Unicode.
  • Длина.
  • Trim.
  • Чтение и запись файлов.

Какую библиотеку мне использовать для достижения наилучшего результата?

Большое спасибо.С нетерпением жду вашего скорого ответа.

1 Ответ

0 голосов
/ 07 декабря 2018

Для функций регулярного выражения / замены / поиска я ранее использовал PCRE.Это предназначено для работы со строками UTF-8.Вы могли бы работать с регулярными выражениями STL, но никак не переносимым способом.(В частности, Windows не поддерживает локали UTF-8.)

Итерация по строке UTF-8 еще сложнее, чем вы описываете, если вам нужно поддерживать объединение меток или объединение нулевой ширины!Вы пишете, что é - это один символ, но это могут быть две кодовые точки Unicode: латинская строчная буква e +, сочетающая острый акцент выше.Если вы просто хотите перебрать кодовые точки, вы можете использовать mbtowc() или std::codecvt::do_in из стандартной библиотеки.Если вам нужно перебирать графемы, самый переносимый способ сделать это - ICU.

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

...