为什么字符集名称不是常量?
2022-08-31 06:04:07
字符集问题本身令人困惑和复杂,但最重要的是,您必须记住字符集的确切名称。是吗?或?或者也许?在互联网上搜索代码示例时,您将看到上述所有内容。为什么不直接将它们命名为常量并使用?"utf8"
"utf-8"
"UTF-8"
Charset.UTF8
字符集问题本身令人困惑和复杂,但最重要的是,您必须记住字符集的确切名称。是吗?或?或者也许?在互联网上搜索代码示例时,您将看到上述所有内容。为什么不直接将它们命名为常量并使用?"utf8"
"utf-8"
"UTF-8"
Charset.UTF8
所提问题的简单答案是,可用的字符集字符串因平台而异。
但是,有六个需要存在,因此很久以前就可以为这些常量创建常量。我不知道为什么他们没有。
JDK 1.4 通过引入 Charset 类型做了一件很棒的事情。在这一点上,他们不想再提供 String 常量,因为目标是让每个人都使用 Charset 实例。那么,为什么不提供六个标准的字符集常量呢?我问Martin Buchholz,因为他碰巧坐在我旁边,他说没有一个特别好的理由,除了当时,事情仍然是半生不熟的 - 太少的JDK API被改造以接受Charset,而在那些中,Charset重载通常表现得稍微差一些。
可悲的是,只有在JDK 1.6中,他们才最终完成了用Charset重载装备一切。而且这种性能倒退的情况仍然存在(原因非常奇怪,我无法解释,但与安全性有关!
长话短说 - 只需定义自己的常量,或者使用Tony the Pony链接到的Guava的Charsets类(尽管该库尚未真正发布)。
更新:标准字符集
类位于 JDK 7 中。
两年后,Java 7的StandardCharsets现在为6个标准字符集定义了常量。
如果你被困在Java 5/6上,你可以使用Guava的Charsets常量,正如Kevin Bourrillion和Jon Skeet所建议的那样。