我正在尝试解析一个xml但是它显示错误,如果我将system.out.println
放到String
我看到它。
前
<?xml version="1.0"
后
?<?xml version="1.0"
我将字符集更改为UTF-8
但不起作用,所以,我该怎么办?
答案 0 :(得分:4)
你有一个UTF-8字符串(这就是为什么Notepad ++正在识别它),但UTF-8不需要一个BOM。一些程序产生它;有些人没有。这会导致在阅读文件时偶尔出现混淆 - 一些读者(如您在Java代码中使用的那些读者)无法识别并忽略它。我建议使用this question或this one的已接受答案来删除它。在从所有传入字符串中删除它们之前,请确保执行检查以确定实际的前3个字节是否为。
答案 1 :(得分:2)
对于想要解析xml且由于BOM
而导致解析有问题的人,上面的代码对我有用。
你可以使用来自apache BomInpustStream的API,它可以帮你完成工作,我遇到了这个问题,你可以相信,使用这个API会容易得多。解析XML
时的提示,您需要将其作为bytes
的数组,检查建议的API,然后解析String
中的charset UTF-8
这样你就不会失去重音......
在inputStream
中转换源代码String source = FileUtil.takeOffBOM(IOUtils.toInputStream(attachment.getValue()));
取消BOM的方法
public static String takeOffBOM(InputStream inputStream) throws IOException {
BOMInputStream bomInputStream = new BOMInputStream(inputStream);
return IOUtils.toString(bomInputStream, "UTF-8");
}
答案 2 :(得分:1)
很多公用事业公司都会产生这种初始的奇怪特征。
您可以使用java代码跳过第一个“&lt;”之前的任何字符。如果你的xml文件是你的,你可以用它来修复它,例如:
vi # no filename here, we need first to get in binary mode.
:set binary
:e filename.containing.your.xml
dt<:w
:q!