0

我从第三方系统获取 utf-8 格式的 xml,我正在尝试正确解析它并将其保存在我的数据库中。例如,下面是我得到的 4 行 xml,当我尝试使用 unescapeXML 时,它适用于除破折号之外的所有内容。

String  one  = "<Name>test &apos; test</Name>";
String  two  = "<Fi>Em &#150; S</Fi>";
String three = "<FirstName>a1 &#228;</FirstName>";
String four = "crap&#201;";

System.out.println(StringEscapeUtils.unescapeXml(one));
System.out.println(StringEscapeUtils.unescapeXml(two));
System.out.println(StringEscapeUtils.unescapeXml(three));
System.out.println(StringEscapeUtils.unescapeXml(four));

输出:

<Name>test ' test</Name>

<Fi>Em  S</Fi>

<FirstName>a1 ä</FirstName>

crapÉ

一切看起来都很好,除了字符串“two”,它实际上应该是“Em – S”。

我试图弄清楚我做错了什么以及解码此类 xml 字符串的最佳方法是什么

4

1 回答 1

0

控制台可能根本无法打印字符 - ( &#150;)。

但是当您检查未转义的字符串时:

String two = "<Fi>Em &#150; S</Fi>";
String twoUnescaped = StringEscapeUtils.unescapeXml(two);
System.out.println(twoUnescaped.codePointAt(7));

您会发现字符引用正确地转义为代码点为 150 的 Java 字符。

于 2016-02-24T03:35:40.957 回答