Если вы планируете просто передавать строки и никогда не проверять их, вы можете использовать простой std::string
, хотя это плохая работа.
Проблема в том, что большинство фреймворков, даже стандартных, тупо (я думаю) принудительно кодируют в памяти. Я говорю глупо, потому что кодирование должно иметь значение только на интерфейсе, а кодирование не приспособлено для манипулирования данными в памяти.
Кроме того, кодирование легко (это простое преобразование CodePoint -> байтов и наоборот), тогда как основная трудность заключается в манипулировании данными.
При использовании 8-битного или 16-битного кода вы рискуете вырезать символ посередине, поскольку ни std::string
, ни std::wstring
не знают, что такое символ Unicode. Хуже того, даже при 32-битной кодировке существует риск отделения символа от диакритических знаков, которые к нему относятся, что также глупо.
Таким образом, поддержка Unicode в C ++ является крайне низкой, если говорить о стандарте.
Если вы действительно хотите манипулировать строкой Unicode, вам нужен контейнер с поддержкой Unicode. Обычный способ - использовать библиотеку ICU
, хотя ее интерфейс на самом деле C-ish. Однако вы получите все необходимое для работы в Unicode с несколькими языками.