将编码的UTF-8字符转换为android中的特殊重音字符

时间:2015-07-19 16:44:47

标签: java android utf-8 non-ascii-characters utf8-decode

在Java中,我有一个从API获得的字符串,如下所示:

  

Hola,é sto es una frase con acentos。

我希望:

  

Hola,éstoees una frase con acentos。

不仅对于这个例子,我需要它用于所有UTF-8编码的字符。

我一直在寻找这个,但我找不到解决办法。

2 个答案:

答案 0 :(得分:2)

这不是编码,而是HTML数字字符引用。

处理它的最简单方法是将Apache Commons Lang库添加到您的项目中,然后调用StringEscapeUtils.unescapeHtml4

答案 1 :(得分:1)

好吧,如果您的文本是使用SGML实体编码的,那么可能的方法是使用XML解析器对其进行解码(尽管它可能不那么聪明):

public static String decodeSgml(String src)
    throws org.xml.sax.SAXException,
    javax.xml.parsers.ParserConfigurationException,
    java.io.IOException
{
    InputSource inputSource=new InputSource(new StringReader("<x>"+src+"</x>"));
    javax.xml.parsers.DocumentBuilderFactory factory=javax.xml.parsers.DocumentBuilderFactory.newInstance();
    javax.xml.parsers.DocumentBuilder docBuilder=factory.newDocumentBuilder();
    org.w3c.dom.Document doc=docBuilder.parse(inputSource);
    return doc.getDocumentElement().getTextContent();
}

(如果该方法抛出的异常数量过多,您可以将其中一些作为ServiceConfigurationErrors重新抛出,或将某些变量存储为静态成员)。