Gar*_*son 6 java xml parsing character-encoding
我正在整理我的一些旧的Java代码,在XML解析包含在JDK库中之前写入XML规范的第一版,并试图使其更新并编写一些测试.特别是我(重新)实现XML 字符编码自动检测,如下所示:
<?xml的XML声明开始"推算"BOM .encoding=,如果有的话,根据XML规范可能告诉我一些更具体或深奥的编码因此,假设该文件具有UTF-16LE的实际BOM.XML encoding属性的值应该是什么?应该是encoding="UTF-16LE"吗?但Unicode字节顺序标记常见问题解答似乎表明,如果存在UTF-16系列BOM,我应该"标记文本" UTF-16.这是否意味着我应该encoding="UTF-16"在我的XML文件中使用?但是,我的解析器应该忽略该encoding值并使用它从BOM中确定的更具体的字符集吗?我开始迷惑自己了.
的W3C HTML BOM FAQ似乎表明,标记所述文本指的是"标记的在HTTP",即,外部的字符集指定,想必在HTTP Content-Encoding报头中.所以,或许这将是确定有开始以BOM尚未包含的XML声明的XML文件UTF-16LE或UTF-16BE.但我还没有看到这样的XML文件.
如果我使用带有XML文件的UTF-16LE BOM,1)我应该在encoding属性中使用什么值,以及2)我的解析器应该自动检测哪个字符集作为文件的编码?
理解这一点的关键是要认识到 UTF-16 编码方案与 UTF-16LE 和 UTF-16BE 不同。UTF-16(小端字节序)不是 UTF-16LE。
请特别注意 Unicode BOM 常见问题解答中最后一个问题中的第 4 点。如果编码是 UTF-16BE 或 UTF-16LE,则不得使用 BOM。您还可以参考 Unicode 标准中的 3.10,了解这些“编码方案”的正式定义。
因此,如果您找到 UTF-16 的 BOM,则编码是 UTF-16,而不是 UTF-16LE 或 UTF-16BE(两者都不允许有 BOM)。如果没有 BOM,则编码可能是这三种编码中的任何一种,但在这种情况下,UTF-16 基本上与 BE 和 LE 变体无法区分。但是,请注意 XML 1.1 的 4.3.3 规定“以 UTF-16 编码的实体必须以 UTF-8 编码的实体可以以字节顺序标记开头”。所以对于XML来说,如果没有BOM,那么编码就不可能是UTF-16(但可能是UTF-16BE或UTF-16LE)。
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |