Java:为什么字符集名称不是常量?

问题:

字符串问题本身令人困惑和复杂,但除此之外,您必须记住您的字符集的确切名称。是"utf8"?还是"utf-8"?还是"UTF-8"?当搜索互联网代码样本时,您将看到上述所有内容。为什么不使它们命名常量并使用Charset.UTF8

回答:

问题简单的答案是可用的字符串字符串在平台之间有所不同。
然而,有六个需要存在,所以常数可能是很久以前的。我不知道为什么他们不是。
通过引入Charset类型,JDK 1.4做了一件很棒的事情。在这一点上,他们不再需要提供String常量,因为目标是让每个人都使用Charset实例。那么为什么不提供六个标准的字符串常数呢?我问马丁·布赫霍兹(Martin Buchholz),因为他恰好坐在我旁边,他说没有一个非常特别的理由,只是那时候,事情还没有完成,除了JDK API已经被改装了接受Charset,而那些Charset过载通常执行得更差一些。
令人遗憾的是,只有在JDK 1.6中,他们终于用Charset重载完成了所有的工作。而且这种向后的表现情况仍然存在(原因是令人难以置信的奇怪,我无法解释,但与安全性有关)。
长篇小说 – 只需定义您自己的常数,或者使用托尼(Pony)链接到的Guava的Charsets类(尽管该库并未真正实际发布)。
 更新:一个StandardCharsets类在JDK 7中。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java: Why charset names are not constants?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

15 + = 21