首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么字符集名称不是常量?

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

Stack Overflow用户
提问于 2009-11-06 06:18:24
回答 6查看 72.3K关注 0票数 213

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-11-06 06:43:51

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

但是,需要有六个常量,所以很久以前就可以为这些常量创建常量了。我不知道为什么他们不是。

JDK 1.4通过引入字符集类型做了一件很棒的事情。在这一点上,他们不想再提供字符串常量了,因为这样做的目的是让每个人都使用字符集实例。那么为什么不提供六个标准的字符集常量呢?我问Martin Buchholz,因为他恰好就坐在我旁边,他说没有什么特别好的原因,除了当时事情还不成熟--只有太少的JDK API经过改进才能接受Charset,而且在这些API中,Charset重载的性能通常稍差一些。

遗憾的是,直到JDK1.6中,他们才最终完成了使用字符集重载的所有功能。这种性能倒退的情况仍然存在(原因非常奇怪,我无法解释,但与安全性有关!)

长话短说--只需定义您自己的常量,或者使用Tony the Pony链接到的Guava的Charsets类(尽管该库还没有真正发布)。

更新:是JDK7中的一个StandardCharsets类。

票数 161
EN

Stack Overflow用户

发布于 2011-10-23 21:11:59

两年后,Java7的StandardCharsets现在为6个标准字符集定义了常量。

如果你坚持使用Java5/6,你可以使用Guava的Charsets常量,这是Kevin Bourrillion和Jon Skeet建议的。

票数 104
EN

Stack Overflow用户

发布于 2009-11-06 06:20:10

我认为我们可以做得更好...为什么保证可用的字符集不能直接访问?Charset.UTF8应该是对Charset的引用,而不是字符串形式的名称。这样我们就不用到处处理UnsupportedEncodingException了。

请注意,我还认为.NET选择了一个更好的策略,默认使用UTF-8。然后它搞砸了,将“操作系统默认”编码属性简单地命名为Encoding.Default --这不是.NET本身的默认属性:(

回到对Java字符集支持的大肆吹嘘--为什么没有一个接受CharsetFileWriter/FileReader构造函数呢?基本上,由于这种限制,这些类几乎是无用的-您几乎总是需要FileInputStream周围的InputStreamReader或等效的输出:(

护士,护士-我的药呢?

编辑:我觉得这并没有真正回答这个问题。真正的答案可能是“没人想到”,或者“有人认为这是个坏主意”。我强烈建议提供名称或字符集的内部实用程序类避免代码库的重复...或者你可以直接使用the one that we used at Google when this answer was first written。(请注意,从Java7开始,您只需使用StandardCharsets。)

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1684040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档