2013-03-25 51 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] 

注意,它不接受十六進制實體引用