将编码的 UTF-8 字符转换为 android 中的特殊重音字符
Transform encoded UTF-8 characters to special accented characters in android
在 Java 中,我有一个从 API 中获得的字符串,它看起来像:
Hola, ésto es una frase con acentos.
我想要:
Hola, ésto es una frase con acentos.
不仅对于这个例子,所有 UTF-8 编码字符都需要它。
我已经找了一个小时了,但还没有找到解决方案。
这不是编码,它是 HTML 数字字符引用。
最简单的处理方法是将 Apache Commons Lang 库添加到您的项目中,然后调用 StringEscapeUtils.unescapeHtml4
好吧,如果您的文本是用 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 重新抛出,或者将一些变量存储为静态成员)。
在 Java 中,我有一个从 API 中获得的字符串,它看起来像:
Hola, ésto es una frase con acentos.
我想要:
Hola, ésto es una frase con acentos.
不仅对于这个例子,所有 UTF-8 编码字符都需要它。
我已经找了一个小时了,但还没有找到解决方案。
这不是编码,它是 HTML 数字字符引用。
最简单的处理方法是将 Apache Commons Lang 库添加到您的项目中,然后调用 StringEscapeUtils.unescapeHtml4
好吧,如果您的文本是用 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 重新抛出,或者将一些变量存储为静态成员)。