java - 为什么字符集名称不是常量?

标签 java character-encoding

字符集问题本身就令人困惑和复杂,但最重要的是,您必须记住字符集的确切名称。是 "utf8" 吗?还是 "utf-8"?或者也许是 "UTF-8"?在互联网上搜索代码示例时,您将看到以上所有内容。为什么不直接将它们命名为常量并使用 Charset.UTF8

最佳答案

问题的简单答案是可用的字符集字符串因平台而异。

但是,有六个必须存在,因此很久以前就可以为这些设置常量。我不知道他们为什么没有。

JDK 1.4 通过引入 Charset 类型做了一件很棒的事情。在这一点上,他们不想再提供 String 常量了,因为目标是让每个人都使用 Charset 实例。那么为什么不提供六个标准的 Charset 常量呢?我问 Martin Buchholz,因为他恰好坐在我旁边,他说没有什么特别好的理由,只是当时事情还不成熟——改造的 JDK API 太少。接受 Charset,并且在其中,Charset 重载通常表现稍差。

很遗憾,只有在 JDK 1.6 中,他们才终于用 Charset 重载完成了一切。而且这种性能落后的情况仍然存在(原因非常奇怪,我无法解释,但与安全性有关!)。

长话短说——只需定义您自己的常量,或使用小马托尼(Tony the Pony)链接到的 Guava 的 Charsets 类(尽管该库尚未真正发布)。

更新: StandardCharsets类在 JDK 7 中。

关于java - 为什么字符集名称不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684040/

相关文章:

linux - Sendmail/procmail - 获取邮件发件人和邮件主题,utf8 编码问题

java - 阅读 PDF Literal String 解析困境

java - 如何使用servlet动态生成pdf

java - 有没有什么方法可以通过循环将数据插入数据库

java - 如何让 Ant 目标等待另一个目标完成

mysql - utf8 和 utf8_general_ci

javascript - 字符编码: â?

java - org.hibernate.NonUniqueResultException : query did not return a unique result: 2?

java - Hibernate 3.6.10 NoSuchMethodError

javascript - 搞乱 Javascript 中的字符