开头xml文件中的奇怪字符

时间:2013-11-23 21:04:08

标签: java xml character-encoding

我正在尝试解析一个xml但是它显示错误,如果我将system.out.println放到String我看到它。

<?xml version="1.0" 

?<?xml version="1.0"

我将字符集更改为UTF-8但不起作用,所以,我该怎么办?

3 个答案:

答案 0 :(得分:4)

你有一个UTF-8字符串(这就是为什么Notepad ++正在识别它),但UTF-8不需要一个BOM。一些程序产生它;有些人没有。这会导致在阅读文件时偶尔出现混淆 - 一些读者(如您在Java代码中使用的那些读者)无法识别并忽略它。我建议使用this questionthis 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!