想要用等效的UTF-8符号替换特殊字符

时间:2013-03-25 12:19:14

标签: java xml

作为我的应用程序的一部分,我编写了一个自定义方法来从数据库中提取数据并将其作为字符串返回。我的字符串有特殊字符,如井号,提取时看起来像这样:

  

“MyMobile Blue£ 54.99 [12个月期限]”

我想要£用实际的英镑符号代替。以下是我的方法:

public String getOfferName(String offerId) {
    log(Level.DEBUG, "Entered getSupOfferName");
    OfferClient client = (OfferClient) ApplicationContext
            .get(OfferClient.class);
    OfferObject offerElement = getOfferElement(client, offerId);
    if (offerElement == null) {
        return "";
    } else {

        return offerElement.getDisplayValue();
    }
}

有人可以为此提供帮助吗?

2 个答案:

答案 0 :(得分:2)

该文件包含XML/HTML entities

您可以使用StringEscapeUtils.unescapeXml()中的commons-lang方法将这些方法解析回其unicode等效项。

如果这是HTML而不是XML,请使用other methods,因为两组实体之间存在差异。

答案 1 :(得分:0)

我投票支持StringEscapeUtils.unescapeXml()解决方案。无论如何,这是一个自定义解决方案

    String s = "MyMobile Blue £54.99 [12 month term]";
    Pattern p = Pattern.compile("&#(\\d+?);");
    Matcher m = p.matcher(s);
    StringBuffer sb = new StringBuffer();
    while(m.find()) {
        int c = Integer.parseInt(m.group(1));
        m.appendReplacement(sb, "" + (char)c);
    }
    m.appendTail(sb);
    System.out.println(sb);

输出

MyMobile Blue £54.99 [12 month term]

请注意,它不接受十六进制实体引用