You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取XML文件字节数组输出差异原因及XML首三字符是什么?

问题解答

问题1:XML文件内部的前三个字符是什么?

你看到的￯ : -17 ᄏ : -69 ﾿ : -65这三个字节,其实是UTF-8的字节顺序标记(BOM),对应的十六进制是EF BB BF。这三个字节并不是XML内容本身的一部分,是部分编辑器保存UTF-8文件时自动添加的标识,用来告诉阅读器文件采用UTF-8编码。而真正XML内容的第一个字符是后面的<(ASCII码60)。

问题2:为何使用Java读取文件字节数组时会出现输出差异?

这个差异的核心原因就是原文件带有UTF-8 BOM,复制后的文件没有了:

  • 原文件exampleData.xml保存时带有UTF-8 BOM,你的代码是直接读取文件的字节数组,所以会把开头的三个BOM字节(-17、-69、-65)也读出来并转换成字符,就出现了那些奇怪的符号输出。
  • 当你把内容复制到exampleDataCopy.xml时,大概率是你的文本编辑器或复制操作自动去掉了UTF-8 BOM(很多编辑器默认保存UTF-8文件时不会添加BOM,复制内容时也会忽略BOM),所以读取这个复制后的文件时,字节数组开头直接就是XML的内容<,自然看不到那三个奇怪的字节输出了。

额外提一句:Java标准字符流(比如Reader)不会自动识别UTF-8 BOM,用字节流读取时就会把BOM当作普通字节处理。如果想避免这种情况,可以在读取时先检查开头是否是BOM字节,然后跳过它们。


内容的提问来源于stack exchange,提问作者datascient

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:07:54