我使用TinyXML来解析/构建XML文件。现在,根据the documentation,该库支持通过UTF-8的多字节字符集。我认为目前为止这么好。但是,库提供的唯一API(用于获取/设置元素名称,属性名称和值,...使用字符串的所有内容)是通过std::string
或const char*
。这让我怀疑自己对多字节字符集支持的理解。一个只支持8位字符的字符串如何包含一个16位字符(除非它使用一个代码页,否定'支持Unicode'声明)?据我所知,理论上可以采取16位代码点,并在2个字符的std::string
分裂,但不会改变的std::string
为“的Unicode”字符串,它将使无效大多数的目的,可能会意外在写入文件并由另一个程序读入时工作。TinyXML的UTF-8支持如何工作?
因此,可以有人向我解释如何图书馆可以提供一个“8位接口”(std::string
或const char*
)和仍然支持“的Unicode”字符串?
(我可能在这里混了一些Unicode的术语;遗憾的任何困惑来自未来)。
好,谢谢,它变得更清晰,但随后仍 - 使用的std :: string来表示UTF-8数据的这种方式,是不是语义错了吗?你永远无法依赖该字符串的内容 - 甚至不会有办法知道它是多久! (字符长度)。 – Roel 2008-09-29 06:38:54