字符集问题本身就令人困惑和复杂,但最重要的是,您必须记住字符集的确切名称。是 "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/