什么是 XML 物料清单,如何检测它?

2022-09-01 16:58:59

ANSI XML 文档中的 BOM 究竟是什么,是否应将其删除?XML 文档是否应该采用 UTF-8 格式?谁能告诉我一个可以检测BOM的Java方法?BOM 由字符 EF BB BF 组成。


答案 1

对于 ANSI XML 文件,实际上应该将其删除。如果你想使用UTF-8,你真的不需要它。只有 UTF-16 和 UTF-32 需要它。

字节顺序标记(或 BOM)是一个特殊的标记,它添加在以 UTF-8、UTF-16 或 UTF-32 编码的 Unicode 文件的开头。它用于指示文件是使用大端字节序还是小端字节顺序。BOM 对于 UTF-16 和 UTF-32 是必需的,但对于 UTF-8 是可选的。

(资料来源:https://www.opentag.com/xfaq_enc.htm#enc_bom

关于如何在java中检测到这个问题。

检查以下问题的答案: Java :如何确定流的正确字符集编码

基本上,只需自己读取前几个字节,然后确定您是否可能找到了BOM。


答案 2

字节顺序标记可能是以下字节序列之一:

     UTF-8 BOM: ef bb bf 
  UTF-16BE BOM: fe ff 
  UTF-16LE BOM: ff fe 
  UTF-32BE BOM: 00 00 fe ff 
  UTF-32LE BOM: ff fe 00 00 

这些是 Unicode 代码点 U+FEFF 的各种编码形式。这可以表示为 Java char 文本(Java char 值隐式为 UTF-16)。由于 U+FEFF 不在大多数编码中,因此此 BOM 代码点不可能由它们进行编码。(有关使用 Java 对 BOM 进行编码的更多信息,请单击此处'\uFEFF'

当涉及到 BOM 和 XML 时,它们是可选的(另请参阅 Unicode BOM 常见问题解答)。如果在声明中指定了编码,则检测 XML 中的编码相对简单。始终确保 XML 声明 () 与用于编写文档的编码匹配。如果你对此很严格,解析器应该能够正确地解释你的文档。(有关编码检测的 XML 规范。<?xml version="1.0" encoding="UTF-8"?>)

我主张尽可能将编码为Unicode(另请参阅Unicode的10条诫命)。也就是说,XML允许通过转义实体表示任何Unicode字符(例如,'A'可以表示为),因此不一定是避免数据丢失的要求。&#x0041;


推荐