【问题标题】:Can I use libxml2 with unicode?我可以将 libxml2 与 unicode 一起使用吗?
【发布时间】:2011-07-15 02:35:10
【问题描述】:

我可以将 libxml2 与 unicode 一起使用吗?我想读写用unicode编写的xml文件,是否可以将libxml2与c++一起使用?

【问题讨论】:

  • 你想知道 libxml2 是否可以处理 wchar_t* 吗?或者您想知道它是否支持非 ASCII 7 位的编码?

标签: c++ xml unicode libxml2


【解决方案1】:

libxml2 在内部使用 utf8 编码来存储值,并将使用 iconv 将输入从指定的编码(在 xml 编码声明中)转换为 utf8。所以是的,libxml2 在某种意义上可以与 unicode 一起使用。

但如果您真正的问题是:libxml2 是否接受 wchar_t* 作为输入,那么答案是否定的。您必须将其转换为 8 位编码(utf8 可能是更安全的选择,因为它可以编码每个 unicode 代码点)。

【讨论】:

  • 没看懂你说的“libxml2内部使用utf8编码”是什么意思,这个内部有什么用?
  • 包含扩展字符的字符串有多种编码方式(iso-8859-1、ascii、shift-jis、utf-8、utf-16,...)。其中一些只覆盖了 unicode 字符集的一部分,而另一些则完全覆盖了它。在 xml 中,一个文档可以知道它使用什么编码(带有<?xml version="1.0" encoding="iso-8859-1"?> 标签)。解析文档时,libxml2 会将文档转换为 utf-8,如果它在处理之前尚未处于此编码中,并将为您提供 utf-8 内容。
  • 谢谢。那么 wchar_t* 是什么意思呢?如果不是来自 xml 文件,它将来自哪里?
  • wchar_t 是在C 标准中定义的类型(并由C++ 继承),可以表示一些宽字符。这些宽字符的编码和实现取决于实现,但它们在 Windows 上经常使用(宏 TCHAR 在所谓的“unicode”模式下编译时扩展为 wchar_t)。我建议你不要使用它们。我问是因为很多 Windows 程序员都假设“unicode == wchar_t”(这是不正确的)。所以为了你的使用,我会说libxml2确实支持unicode。
【解决方案2】:

看起来the answer is yes

将此处理指令用于 UTF-8 内容*:

<?xml version="1.0" encoding="UTF-8"?>

*这是我假设你所说的“unicode”的意思,因为Unicode is not UTF-8

【讨论】:

  • 谢谢。我在您提供的链接中读到“xmlChar,libxml2 数据类型是一个字节,这些字节必须组装为 UTF-8 有效字符串。”那是什么意思?什么是字节组合成 utf-8?
猜你喜欢
  • 2023-03-25
  • 2020-08-04
  • 2018-10-23
  • 2011-02-22
  • 2021-03-16
  • 2016-11-20
  • 2019-01-25
  • 2011-06-11
  • 2017-02-20
相关资源
最近更新 更多