Я попытаюсь привести некоторые идеи здесь:
- большинство программ / программистов на C ++ просто предполагают, что текст представляет собой почти непрозрачную последовательность байтов.UTF-8, вероятно, виновен в этом, и неудивительно, что многие комментарии возобновляют: не беспокойтесь о Unicode, просто обрабатывайте строки в кодировке UTF-8
- файлы содержат только байты,В настоящий момент, если вы попытаетесь внутренне обработать истинные кодовые точки Unicode, вам придется сериализовать это в байты -> и здесь UTF-8 выигрывает точку
, как только вы выходите изБазовая многоязычная плоскость (16-битные кодовые точки), вещи становятся все более и более сложными. emoji особенно ужасен в обработке: за эмодзи может следовать селектор вариаций (U + FE0E VARIATION SELECTOR-15 (VS15) для текста или U + FE0F VARIATION SELECTOR-16(VS16) для стиля эмодзи), чтобы изменить его стиль отображения, более или менее старый i bs ^
, который использовался в 1970-х годах, когда кто-то хотел напечатать î
.Это еще не все, символы от U + 1F3FB до U + 1F3FF используются для предоставления цвета кожи для 102 человеческих смайликов, разбросанных по шести блокам: дингбаты, смайлики, разные символы, разные символы и пиктограммы, дополнительные символы и пиктограммы, а также транспорт и карта.Символы.
Это просто означает, что до 3 последовательных кодовых точек Unicode могут представлять один отдельный глиф ... Таким образом, идея о том, что один символ равен одному char32_t
, по-прежнему является приблизительной
Мой вывод заключается в том, что Unicode - это сложная вещь, и для нее действительно требуется специальная библиотека, такая как ICU.Вы можете попробовать использовать простые инструменты, такие как конвертеры стандартной библиотеки, когда имеете дело только с BMP, но полная поддержка намного выше этого.
Кстати: даже другие языки, такие как Python, которые делают вид, что имеютВстроенная поддержка Unicode (которая, на мой взгляд, намного лучше, чем у нынешнего C ++), иногда дает сбой:
- Библиотека GUI tkinter не может отображать какие-либо кодовые точки вне BMP - хотя это стандартный Python IDLEtool
- различные модули или стандартная библиотека предназначены для Unicode в дополнение к поддержке основного языка (кодеки и unicodedata), а в индексе пакетов Python доступны и другие модули, такие как поддержка emoji, поскольку стандартная библиотека неудовлетворить все потребности
Таким образом, поддержка Unicode оставляет желать лучшего уже более 10 лет, и я не очень надеюсь, что в ближайшие 10 лет дела пойдут намного лучше ...