stringescapeutils unescape en dash with code -

时间:2016-02-24 02:59:29

标签: java xml escaping stringescapeutils

我从utf-8格式的第三方系统获取xml,我正在尝试正确解析它并将其保存在我的数据库中。例如,下面是我获得的xml的4行,当我尝试使用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字符串的最佳方法是什么

1 个答案:

答案 0 :(得分:0)

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

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

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

你会发现字符引用被正确转义为带有代码点150的Java字符。