【问题标题】:Want to replace special characters with equivalent UTF-8 symbols想用等效的 UTF-8 符号替换特殊字符
【发布时间】:2013-03-25 21:54:38
【问题描述】:

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

“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();
    }
}

有人可以帮忙吗?

【问题讨论】:

  • 为什么您认为您还没有真正的 Unicode 字符来表示 £?
  • This 应该会有所帮助。帖子中的链接似乎死了 - here's 一个有效的。
  • @bmargulies - 已编辑。 OP 具有用于 £. 的 HTML (XML) 实体
  • @bmorris591 发布答案?
  • 输入的是XML还是HTML?解析器应该负责转换,而不是你。

标签: java xml


【解决方案1】:

文档包含XML/HTML entities

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

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

【讨论】:

    【解决方案2】:

    我投票支持 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]
    

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

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多