【问题标题】:Setting encoding in XML files在 XML 文件中设置编码
【发布时间】:2010-10-19 09:49:26
【问题描述】:

哪些是有效的 xml 编码字符串?比如指定UTF-8的方式是什么:

  • encoding="utf8"
  • encoding="utf8"

或 Windows 1251:

  • encoding="windows-1251"
  • encoding="windows1251"
  • encoding="cp-1251"

我正在制作一个字符解码器以及一个 xml 解析器。因此,我需要能够根据 encoding 属性的值设置我的 StreamReader 的编码。

有什么可以找到官方编码字符串列表的想法吗?

我能找到的最好的是this,但它似乎是特定于 IE 的。

谢谢!

【问题讨论】:

  • 我很想知道您为什么要编写自己的 XML 解析器。您不使用现有解析器的任何原因?

标签: xml encoding


【解决方案1】:

如果全部失败,请阅读规范 :-)。

4.3.3 实体中的字符编码

XML 中的每个外部解析实体 文档可能使用不同的编码 因为它的角色。

[...]

在编码声明中,值 “UTF-8”、“UTF-16”、“ ISO-10646-UCS-2“和” ISO-10646-UCS-4“应该用于 各种编码和 Unicode/ISO/IEC 的转换 10646,值“ISO-8859-1”,“ ISO-8859-2", ..." ISO-8859-n" (其中 n 是部件号)应该是 用于 ISO 8859 的部分,以及 值“ ISO-2022-JP”,“ Shift_JIS " 和 " EUC-JP " 应该是 用于各种编码形式 JIS X-0208-1997。

推荐 该字符编码已注册 (作为字符集)与互联网 号码分配机构 IANA-CHARSETS,除了那些 列出,被称为使用他们的 注册名称;其他编码 应使用以“x-”开头的名称 前缀。

来源:http://www.w3.org/TR/REC-xml/

所以 UTF-8 写成encoding="UTF-8"

对于上面未列出的其他字符集,请使用IANA character set list 中给出的名称。

字符集名称中的字母大小写不重要:“但是,没有区别 在使用大小写字母之间。”(IANA 字符集列表)。所以你也可以写 encoding="uTf-8" 如果你喜欢的话 ;-)。

顺便说一句:您真的,真的确定要编写自己的 XML 解析器吗?这听起来有点像重新发明轮子。

【讨论】:

  • +1 表示“阅读规范”,-1 表示“如果全部失败”(它应该是编写解析器时的第一个调用端口,而不是最后一个),再次 +1 表示“重新发明”轮子';)
  • @David Dorward 谢谢:-)。老实说,一般来说,我不建议将规范作为初学者的首选,许多规范可能相当令人生畏。但是,如果您在教程中找不到答案(或者如果您想确定什么是正确的),那么规范就是您可以去的地方。不管怎样,你可能注意到了“如果一切都失败了”旁边的笑脸。
  • 笑脸旁边是阅读规范 :) 说真的,问题表明目标是编写一个通用解析器,因此它需要涵盖可能的所有内容解析,并且真的真的需要规范,因为它以技术术语列出了要求。如果有人编写的文档提供了足够的信息来编写针对初学者的解析器,我会感到非常惊讶。
  • 正如 sleske 所说,这一切都在 IANA 列表中:iana.org/assignments/character-sets 非常感谢!我一直很愚蠢,没有在规范中找到这个。是的,出于一些尴尬的原因,我需要自己的解析器。再次感谢!
【解决方案2】:
<?xml version="1.0" encoding="utf-8"?>

对于 utf-8 应该没问题。

【讨论】:

    【解决方案3】:

    使用命令 locale -A 查看所有编码: http://dwbitechguru.blogspot.ca/2014/07/check-foreign-characters-support-on.html

    选项 A: 使用以下标签添加编码:

    您可以使用 XML spy 编辑 dtd 中的编码属性。

    相关链接: http://dwbitechguru.blogspot.ca/2014/07/issue-xml-reader-error.html

    【讨论】:

    • 在您的 XML 之前多加几个空格以使其格式正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2013-10-04
    • 2018-01-11
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多