Я использую TinyXML для анализа/создания файлов XML. Теперь, согласно документации, эта библиотека поддерживает многобайтовые наборы символов через UTF-8. Пока все хорошо, я думаю. Но единственный API, который предоставляет библиотека (для получения/установки имен элементов, имен и значений атрибутов,... всего, где используется строка), — это std::string
или const char*
. Это заставляет меня сомневаться в собственном понимании поддержки многобайтовых наборов символов. Как строка, которая поддерживает только 8-битные символы, может содержать 16-битный символ (если только она не использует кодовую страницу, которая опровергает утверждение «поддерживает Unicode»)? Я понимаю, что теоретически вы могли бы взять 16-битную кодовую точку и разделить ее на 2 символа в std::string
, но это не преобразовало бы std::string
в строку «Unicode», это сделало бы ее недействительной для большинства целей и, возможно, случайно работать при записи в файл и чтении другой программой.
Итак, может ли кто-нибудь объяснить мне, как библиотека может предлагать «8-битный интерфейс» (std::string
или const char*
) и при этом поддерживать строки «Unicode»?
(Я, вероятно, перепутал здесь некоторую терминологию Unicode; извините за возникшую из-за этого путаницу).