【问题标题】:stringescapeutils unescape en dash with code &#150stringescapeutils unescape en dash with code &#150
【发布时间】:2016-06-06 04:02:09
【问题描述】:

我从第三方系统获取 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 字符串的最佳方法是什么

【问题讨论】:

    标签: java xml escaping stringescapeutils


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答,是否有一个实用程序,它只转义数字实体,如以 开头的实体,而不转义常规 xml 实体,如 '
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2010-10-11
    相关资源
    最近更新 更多