如何使用混合编码解析xml文件

时间:2016-10-17 12:42:39

标签: java xml-parsing

自从几个月以来,每天晚上我的服务都是从外部webservice加载xml文件。我的服务解析xml数据并将它们存储在数据库中。

DocumentBuilder dBuilder = factory.newDocumentBuilder();
Document doc = dBuilder.parse(inputStream);
[...]

今晚该服务报告错误:

  

MalformedByteSequenceException:1字节UTF-8序列的无效字节1

正如您所看到的,xml节点locationname标记内包含一些损坏的字符串:

<location>
    <name>Park Inn by Radisson Dldorf-Sname>
    <country>Deutschland</country>
    <region></region>
    <city>Düsseldorf</city>
    <zip>40599</zip>
    <street>Am Schönenkamp 9</street>
</location>

[...]

<location>
    <name>BEST WESTERN Hotel City Centre Brl</name>
    <country>Belgien</country>
    <region></region>
    <city>Brüssel</city>
    <zip>1210</zip>
    <street>Square Victoria Regina 9</street>
</location>

像oder street这样的其他标签已经很好地形成了utf-8字符串。

我无法控制xml webservice 。所以我必须在我的服务中做这个热修复。

我的想法是写一个转换器,但它不会工作:

// convert the value of <name>?</name> to an utf8 string
private static String convertToUTF8(String brokenNonUtf8String) throws Exception{
    ByteBuffer bb = ByteBuffer.wrap(brokenNonUtf8String.getBytes()); // "UTF-8"
    CharBuffer cb = Charset.forName("windows-1252").decode(bb);
    bb = Charset.forName("UTF-8").encode(cb);
    return new String(bb.array());
}

输入现在是:

<name>Park Inn by Radisson D�sseldorf-S�d</name>

我知道如何解决这个问题。

0 个答案:

没有答案