您的位置 首页 java

尚学堂java学习笔记:字符集类

Charset类封装特定字符集的永恒信息。Charset是抽取。通过调用静态工厂方法forName()获得具体实例,导入所需字符集的名称。所有的Charset方法都是 线程安全 的;单一实例可以在多个 线程 中共享。

可以调用布尔类(boolean class)方法isSupported()来确定在JVM运行中当前指定的字符集是否可用。通过Charset SPI机制可以动态安装新的字符集,所以给定字符集名称的答案可以随时间变化。在第6.3节中论述了Charset SPI。

一个字符集可以有多个名称。通常它有一个规范名称但是也有零个或多个别名。规范名称或别名都可以通过forName()和isSupported()进行使用。

一些字符集也有历史遗留的名称,它们用于之前的 java 平台版本并且 向后兼容 。字符集的历史名称是由InputStreamReader和OutputStream-Writer类的getEncoding()返回。如果字符集有历史名称,那么它将是规范名称或者Charset的别名之一。Charset类不提供指出历史名称的标示。

静态类方法的最后一个,availableCharsets(),将返回在JVM中当前有效的所有字符集的java.util.SortedMap。正如isSupported(),如果安装新的字符集返回的值会随着时间改变。返回映射的成员将是用它们的规范名称作为密钥的Charset对象。迭代时,映射将根据规范名称按字母顺序排列。

availableCharsets()方法可能很慢。虽然支持许多字符集,但是通常它们只在有明确要求时才能被创建。调用availableCharsets()需要实例化所有已知的Charset对象。实例化Charset可能需要加载库、网络资源访问、翻译表计算等等。如果您知道要使用的字符集的名称,使用forName()方法。当您需要列举所有可用的字符集时使用availableCharsets()—例如,面向交互用户展示一个选项。假设在此期间未安装新的字符集,通过availableCharsets()返回的Map 精确的包含了用forName()可返回的相同的字符集。

一旦获取Charset实例的参数,name()方法将返回字符集的规范名称,并且aliases()将给出包含别名的Set。由aliases()返回的Set将永远不会是null,但是可以为空。

每个Charset对象也有两个displayName()方法。这些方法的默认实现仅仅返回规范字符集名称。这些方法可以提供本地化的显示名称,例如,用在菜单或选项中。displayName()方法可以使用 Locale 参数指定一个地方化的环境。无参数版本使用默认区域设置。

如本节开端提到的, IANA 是维护字符集名称的权威登记机构。如果给出的Charset对象表示在IANA注册的字符集,那么isRegistered()方法将返回true。如果是这样的话,那么Charset对象需要满足几个条件:

 字符集的规范名称应与在IANA注册的名称相符。

 如果IANA用同一个字符集注册了多个名称,对象返回的规范名称应该与IANA注册中的MIME-首选名称相符。

 如果字符集名称从注册中移除,那么当前的规范名称应保留为别名。

 如果字符集没有在IANA注册,它的规范名称必须以“X-”或“x-”开头。

大多数情况下,只有JVM卖家才会关注这些规则。然而,如果您打算以您自己的字符集作为应用的一部分,那么了解这些不该做的事情将对您很有帮助。针对isRegistered()您应该返回false并以“X-”开头命名您的字符集。

文章来源:智云一二三科技

文章标题:尚学堂java学习笔记:字符集类

文章地址:https://www.zhihuclub.com/198283.shtml

关于作者: 智云科技

热门文章

网站地图