win32 上的 libxml 字符编码问题
使用 libxml 解析某些 html 文件时,函数 xmlParseFile() 返回代码包含非 UTF-8 字符 如何将库的默认字符集修改为 ISO-8859-1 ?还有其他方法可以解决这个问题吗?
PS:整个开发基于libxml,并且在大多数情况下都可以工作,因此我无法切换到另一个库。
While parsing some html files with libxml the function xmlParseFile() returns that the code includes non UTF-8 characters How can i modify the default charset of the library to ISO-8859-1 ? Is there any other way to solve this ?
PS: The entire development is based on libxml and works in most cases so I can't switch to another library.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用于 XML 数据的编码必须在 XML 的序言中指定。如果未指定编码,W3 的 XML 规范规定必须采用 UTF-8。
为什么使用 XML 解析器来解析 HTML 数据? libxml 有一个与其 XML 解析器分开的 HTML 解析器。查看 htmlParseFile() 和相关函数。由于 HTML 不是 XML,因此不会出现 XML 序言来指示数据编码。不过,HTML 确实有一个
标记,可以在
标记内使用。如果没有直接显式传递给 htmlParseFile(),libxml 的 HTML 解析器会查找该标记来确定编码。
The encoding used for XML data must be specified in the XML's prolog. If no encoding is specified, W3's XML spec dictates that UTF-8 must be assumed instead.
Why are you using an XML parser for parsing HTML data? libxml has an HTML parser separate from its XML parser. Look at htmlParseFile() and related functions. Since HTML is not XML, there would be no XML prolog present to indicate the data encoding. HTML does have a
<meta>
tag available that can be used inside the<head>
tag for that, though. libxml's HTML parser does look for that tag to determine the encoding, if not explicitally passed to htmlParseFile() directly.