刚开始使用Apache Commons StringEscapeUtils
。
根据http://www.w3schools.com/tags/ref_entities.asp,Ö
应对应于Ö。然而,
System.out.println(StringEscapeUtils.unescapeHtml4("Ö"));
打印
×
这是一个错误吗?或者我错过了什么?
答案 0 :(得分:6)
我猜lang3存储库中的EntityArrays.java是错误的:
{"\u00D6", "Õ"}, // � - uppercase O, tilde
{"\u00D7", "Ö"}, // � - uppercase O, umlaut
{"\u00D8", "×"}, // multiplication sign
看来,有些值会移动一行。必须是:
{"\u00D6", "Ö"}, // � - uppercase O, umlaut
{"\u00D7", "×"}, // multiplication sign
因为根据LATIN CAPITAL LETTER O WITH DIAERESIS
,Ö
为00D6
且x
为"\u00D7"
答案 1 :(得分:2)
版本2.5 StringEscapeUtils.unescapeHtml
打印Ö
版本3.0-beta StringEscapeUtils.unescapeHtml3
和StringEscapeUtils.unescapeHtml4
打印×
通常我会使用最新的稳定版本(目前为2.5)。看起来像一个错误,但我在https://issues.apache.org/jira/browse/LANG
中找不到任何有用的东西答案 2 :(得分:0)
也许你的控制台无法显示Ö字符。检查系统属性file.encoding
以查看默认控制台编码是什么。
如果您的控制台支持UTF-8,您可以尝试使用-Dfile.encoding=utf-8
启动JVM,或者您可以从您的应用程序执行此操作:
System.setOut(new PrintStream(System.out, true, "utf-8"));
如果控制台不支持UTF-8,我建议尝试使用UTF-8编码将其写入文件,然后使用可以处理UTF-8的文本编辑器打开文件。
如果所有这些都不起作用,则可能是StringEscapeUtils
中的错误。