我正在为本地语言制作一个提要阅读器应用程序。新闻网站提供带有这些字符的 RSS feed
ഹലോ സ്റ്റാക്ക്ഓവ x0D7C; ഫ്ലോ
这实际上意味着
ഹലോസ്റ്റാക്ക്ഓവർഫ്ലോ
这也是我想在我的应用程序中显示的内容..
如何将此输入转换为所需的形式..
最佳答案
试试这个。
String input = "ഹലോ സ്റ"
+ "്റാക്ക്ഓ"
+ "വർ ഫ്ലോ";
Pattern HEX = Pattern.compile("(?i)&#x([0-9a-f]+);|&#(\\d+);");
Matcher m = HEX.matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb,
String.valueOf((char) (m.group(1) != null ?
Integer.parseInt(m.group(1), 16) :
Integer.parseInt(m.group(2)))));
m.appendTail(sb);
String output = sb.toString();
System.out.println(output);
// -> ഹലോ സ്റ്റാക്ക്ഓവർ ഫ്ലോ
此代码还可以处理十进制 NCR。
但无法处理 x10000
到 x10FFFF
。
或者您可以使用Jsoup像这样。
Document doc = Jsoup.parse(input);
String output = doc.text();
System.out.println(output);
// -> ഹലോ സ്റ്റാക്ക്ഓവർ ഫ്ലോ
关于java 将十六进制 NCR 文本转换为 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565586/