2013-03-25 75 views
0

作为我的应用程序的一部分,我编写了一个自定义方法来从数据库提取数据并将其作为字符串返回。我的字符串具有特殊字符,如英镑符号,其提取看起来像这样的时候:想要替换等同UTF-8符号的特殊字符

“的MyMobile蓝£ 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(); 
    } 
} 

有人可以帮助吗?

+1

为什么你认为你已经不具有真正的Unicode字符£? – bmargulies 2013-03-25 12:23:53

+0

[这](http://stackoverflow.com/questions/994331/java-how-to-decode-html-character-entities-in-java-like-httputility-htmldecode)应该有所帮助。链接在帖子似乎死了 - [这里](http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#unescapeXml(java.lang。字符串))一个工程。 – 2013-03-25 12:25:50

+0

@bmargulies - 已编辑。 OP有£的HTML(XML)实体。 – 2013-03-25 12:26:24

回答

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] 

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