ANSI XML 文档中的 BOM 到底是什么,是否应该删除? XML 文档应该改为 UTF-8 格式吗?谁能告诉我一个检测 BOM 的 Java 方法? BOM 由字符 EF BB BF 组成。
原文由 djangofan 发布,翻译遵循 CC BY-SA 4.0 许可协议
ANSI XML 文档中的 BOM 到底是什么,是否应该删除? XML 文档应该改为 UTF-8 格式吗?谁能告诉我一个检测 BOM 的 Java 方法? BOM 由字符 EF BB BF 组成。
原文由 djangofan 发布,翻译遵循 CC BY-SA 4.0 许可协议
字节顺序标记很可能是这些字节序列之一:
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 的各种编码形式。这可以使用 '\uFEFF'
表示为 Java 字符文字(Java 字符值 隐式 为 UTF-16)。由于 U+FEFF 不在大多数编码中,因此此 BOM 代码点不可能由它们编码。 ( 更多关于在此处使用 Java 编码 BOM 的信息。)
对于 BOM 和 XML,它们是可选的(另请参阅 Unicode BOM FAQ )。如果在声明中指定了编码,那么检测 XML 中的编码就相对简单了。始终确保 XML 声明 ( <?xml version="1.0" encoding="UTF-8"?>
) 与用于编写文档的编码匹配。如果您对此很严格,解析器应该能够正确解释您的文档。 ( 关于编码检测的 XML 规范。 )
我提倡尽可能使用 Unicode 编码(另请参阅 Unicode 的 10 条诫命)。也就是说,XML 允许通过转义实体表示任何 Unicode 字符(例如,“A”可以表示为 A
),因此它不一定是避免数据丢失的必要条件。
原文由 McDowell 发布,翻译遵循 CC BY-SA 2.5 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
对于 ANSI XML 文件,它实际上应该被删除。如果你想使用 UTF-8,你真的不需要它。只有 UTF-16 和 UTF-32 需要它。
_(来源: https ://www.opentag.com/xfaq_enc.htm#encbom)
关于如何在 java 中检测到这一点的问题。
检查此问题的以下答案:Java : How to determine the correct charset encoding of a stream 如果您现在想自己确定 BOM(风险自负),请检查例如此代码 Java Tip: How to read a file and自动指定正确的编码。
基本上只需自己读取前几个字节,然后确定您 是否 找到了 BOM。