首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML编码声明和endianness

XML编码声明和endianness
EN

Stack Overflow用户
提问于 2014-08-25 01:14:54
回答 1查看 1.1K关注 0票数 6

在JDK库中包含XML解析之前,我正在整理一些非常老的Java代码,这些代码写到XML规范的第一版,并试图更新它并编写一些测试。特别是,我正在(重新)实现这样的XML 字符编码自动检测

  1. 我读过BOM如果有的话。
  2. 如果没有BOM,我将根据所期望的<?xml声明的开始来“推断”BOM。
  3. 我现在有足够的信息(每个字符的字节数、endianness等等)。阅读encoding=声明(如果有的话),根据XML规范,它可能会告诉我一些更具体或更深奥的编码。

因此,假设该文件有一个用于UTF-16LE的实际BOM。XML属性的值应该是什么?应该是encoding="UTF-16LE"吗?但是Unicode Byte命令标记FAQ似乎表明,如果一个UTF-16家庭BOM存在,我应该“标记文本”为仅仅UTF-16。这是否意味着我应该在我的XML文件中使用encoding="UTF-16"?但是,我的解析器是否应该忽略encoding值,而使用它从BOM中确定的更具体的字符集呢?我开始迷惑自己了。

W3C HTML常见问题似乎表明,标记文本是指“在HTTP中标记”,即外部字符集指定,大概在header中。因此,也许可以让一个以BOM开头的XML文件包含UTF-16LEUTF-16BE的XML声明。但是我还没有看到这样的XML文件。

如果我在XML文件中使用一个UTF-16LEBOM,1)我应该在encoding属性中使用什么值,2)解析器应该自动检测什么字符集作为文件的编码?

EN

回答 1

Stack Overflow用户

发布于 2014-09-02 16:20:39

理解这一点的关键是认识到UTF-16编码方案不同于UTF-16 to和UTF-16 to。UTF-16,小endian,不是UTF-16 is。

注意,特别是Unicode BOM常见问题中最后一个问题的第4点。如果编码是UTF-16 be或UTF-16 be,则不能使用BOM。对于这些“编码方案”的正式定义,您也可以参考Unicode标准中的3.10。

因此,如果您找到UTF-16的BOM,编码是UTF-16,而不是UTF-16 to或UTF-16 to(两者都不允许有BOM)。如果没有BOM,编码可能是这三种中的任何一种,尽管在这种情况下,UTF-16基本上与be和LE变体没有区别。但是,请注意,XML1.1中的4.3.3说“在UTF-16中编码的实体必须和在UTF-8中编码的实体可以以Byte Order Mark开头”。因此,对于XML,如果没有BOM,那么编码就不能是UTF-16 (但可能是UTF-16 be或UTF-16 be )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25477854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档