【问题标题】:Bug in Apache Commons StringEscapeUtil?Apache Commons StringEscapeUtil 中的错误?
【发布时间】:2010-11-13 13:41:33
【问题描述】:

刚开始使用 Apache Commons StringEscapeUtils。

根据http://www.w3schools.com/tags/ref_entities.asp,Ö应该对应Ö。然而,

System.out.println(StringEscapeUtils.unescapeHtml4("Ö"));

打印

×

这是一个错误吗?或者我错过了什么?

【问题讨论】:

  • 它在哪里打印?在控制台上?
  • 不,在打印机上... jk,是的,在控制台中。
  • 你的控制台可以显示Ö吗?
  • 你用的是3.0 beta版吗?
  • 是的。 3.0 beta,所以问题来了,这个beta版本有bug吗?

标签: java html apache-commons


【解决方案1】:

我猜来自 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"

【讨论】:

    【解决方案2】:

    版本 2.5 StringEscapeUtils.unescapeHtml 打印 Ö

    版本 3.0-beta StringEscapeUtils.unescapeHtml3 和 StringEscapeUtils.unescapeHtml4 打印 ×

    通常我会使用最新的稳定版本(目前是 2.5)。看起来像一个错误,但我在 https://issues.apache.org/jira/browse/LANG 中找不到任何有用的东西

    【讨论】:

    • 已确认。 2.5 作品。我想是 Beta 版中的错误。谢谢cherouvim!
    【解决方案3】:

    也许您的控制台无法显示 Ö 字符。检查系统属性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 中的一个错误。

    【讨论】:

    • 控制台为ö 打印了ö,所以这可能不是问题。
    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2019-01-03
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2011-07-28
    相关资源
    最近更新 更多