Я использую TinyXML для разбора/создания XML-файлов. Теперь, согласно the documentation, эта библиотека поддерживает многобайтовые наборы символов через UTF-8. До сих пор так хорошо, что я думаю. Но единственный API, который предоставляет библиотека (для получения/установки имен элементов, имен атрибутов и значений, ... всего, где используется строка), составляет std::string
или const char*
. Это заставляет меня сомневаться в моем понимании многобайтовой поддержки набора символов. Как строка, поддерживающая только 8-битные символы, содержит 16-битный символ (если только он не использует кодовую страницу, что бы отрицать утверждение «поддерживает Unicode»)? Я понимаю, что теоретически можно взять 16-битную кодовую точку и разделить ее на 2 символа в std::string
, но это не превратило бы std::string
в строку «Unicode», это сделало бы ее недопустимой для большинства целей и, возможно, случайно работать при записи в файл и читать в другой программе.Как работает UTF-8 TinyXML?
Итак, может ли кто-нибудь объяснить мне, как библиотека может предложить «8-битный интерфейс» (std::string
или const char*
) и по-прежнему поддерживать строки «Unicode»?
(Я, вероятно, перепутал терминологию Юникода здесь, извините за любую путаницу, исходящую от этого).
Хорошо, спасибо, это становится понятнее, но затем - используя std :: string для представления данных UTF-8 таким образом, разве это не семантически неправильно? Вы никогда не сможете полагаться на содержимое этой строки - даже не будет способа узнать, как долго это будет! (длина символа). – Roel 2008-09-29 06:38:54