类 Charset

类 Charset

十六位 Unicode 代码单元 序列和字节序列之间的命名映射。此类定义用于创建解码器和编码器以及检索与字符集关联的各种名称的方法。此类的实例是不可变的。

此类还定义了静态方法,用于测试是否支持特定字符集、按名称定位字符集实例以及构建包含当前 Java 虚拟机支持的每个字符集的映射。可以通过 CharsetProvider 类中定义的服务提供者接口添加对新字符集的支持。

此类中定义的所有方法都可以安全地供多个并发线程使用。

字符集名称

字符集由以下字符组成的字符串命名:

大写字母 'A' 到 'Z'('\u0041' 到 '\u005a'),

小写字母 'a' 到 'z'('\u0061' 到 '\u007a'),

数字 '0' 到 '9'('\u0030' 到 '\u0039'),

破折号字符 '-' ('\u002d' ,HYPHEN-MINUS),

加号 '+' ('\u002b' ,PLUS SIGN),

句点字符 '.' ('\u002e' ,FULL STOP),

冒号字符 ':' ('\u003a' ,COLON), 和

下划线字符 '_' ('\u005f' ,LOW LINE).

字符集名称必须以字母或数字开头。空字符串不是合法的字符集名称。字符集名称不区分大小写;也就是说,在比较字符集名称时总是忽略大小写。字符集名称通常遵循 RFC 2278:IANA 字符集注册程序 中记录的约定。

每个字符集都有一个规范名称也可能有一个或多个aliases.规范名称由此类的 name 方法返回。按照惯例,规范名称通常是大写的。 aliases 方法返回字符集的别名。

Some charsets have an historical name that is defined for compatibility with previous versions of the Java platform. 字符集的历史名称是其规范名称或其别名之一。 InputStreamReader 和 OutputStreamWriter 类的 getEncoding() 方法返回历史名称。

如果 IANA 字符集注册表 中列出的字符集受 Java 平台实现的支持,则其规范名称必须是注册表中列出的名称。许多字符集在注册表中被赋予了多个名称,在这种情况下,注册表将其中一个名称标识为MIME 首选.如果一个字符集有多个注册表名称,那么它的规范名称必须是 MIME 首选名称,注册表中的其他名称必须是有效的别名。如果支持的字符集未在 IANA 注册表中列出,则其规范名称必须以字符串 "X-" 或 "x-" 之一开头。

IANA 字符集注册表确实会随时间变化,因此特定字符集的规范名称和别名也可能随时间变化。为确保兼容性,建议不要从字符集中删除任何别名,并且如果更改了字符集的规范名称,则将其先前的规范名称设为别名。

标准字符集

Java 平台的每个实现都需要支持以下标准字符集。请查阅您的实现的发布文档以查看是否支持任何其他字符集。此类可选字符集的行为可能因实现而异。

标准字符集的描述

Charset

Description

US-ASCII

七位 ASCII,又名 ISO646-US ,又名 Unicode 字符集的基本拉丁语块

ISO-8859-1

ISO 拉丁字母编号 1,又名 ISO-LATIN-1

UTF-8

八位 UCS 转换格式

UTF-16BE

十六位 UCS 转换格式,大端字节顺序

UTF-16LE

十六位 UCS 转换格式,小端字节序

UTF-16

十六位 UCS 转换格式,由可选字节顺序标记标识的字节顺序

UTF-8 字符集由 RFC 2279 指定;它所基于的转换格式在 ISO 10646-1 的修正案 2 中指定,并且也在 Unicode标准 中进行了描述。

UTF-16 字符集由 RFC 2781 指定;它们所基于的转换格式在 ISO 10646-1 的修正案 1 中指定,并且也在 Unicode标准 中进行了描述。

UTF-16 字符集使用 16 位数量,因此对字节顺序敏感。在这些编码中,流的字节顺序可以由一个初始的字节顺序标记由 Unicode 字符 '\uFEFF' 表示。字节顺序标记的处理如下:

解码时,UTF-16BE 和 UTF-16LE 字符集将初始字节顺序标记解释为ZERO-WIDTH NON-BREAKING SPACE;编码时,他们不写字节顺序标记。

解码时,UTF-16字符集解释输入流开头的字节顺序标记,以指示流的字节顺序,但如果没有字节顺序标记,则默认为大端;编码时使用big-endian字节序,写入big-endian字节序标记。

在任何情况下,在输入序列的第一个元素之后出现的字节顺序标记不会被省略,因为相同的代码用于表示ZERO-WIDTH NON-BREAKING SPACE.

Java 虚拟机的每个实例都有一个默认字符集,它可能是也可能不是标准字符集之一。默认字符集是在虚拟机启动期间确定的,通常取决于底层操作系统使用的locale和字符集。

StandardCharsets 类为每个标准字符集定义常量。

术语

此类的名称取自 RFC 2278 中使用的术语。在该文档中charset被定义为一个或多个编码字符集和字符编码方案的组合。 (这个定义很混乱;其他一些软件系统定义charset作为同义词编码字符集.)

A 编码字符集是一组抽象字符和一组整数之间的映射。 US-ASCII、ISO 8859-1、JIS X 0201 和 Unicode 是编码字符集的示例。

一些标准定义了一个字符集只是一组没有相关分配编号的抽象字符。字母表就是这种字符集的一个示例。然而,两者之间的细微差别字符集和编码字符集在实践中很少使用;前者已成为后者的缩写形式,包括在 Java API 规范中。

A 字符编码方案是一个或多个编码字符集与一组八位字节(八位字节)序列之间的映射。 UTF-8、UTF-16、ISO 2022 和 EUC 是字符编码方案的示例。编码方案通常与特定的编码字符集相关联;例如,UTF-8 仅用于编码 Unicode。然而,一些方案与多个编码字符集相关联;例如,EUC 可用于对各种亚洲编码字符集中的字符进行编码。

当编码字符集专门用于单一字符编码方案时,相应的字符集通常以编码字符集命名;否则,字符集通常根据编码方案命名,可能还有它支持的编码字符集的区域设置。因此,US-ASCII 既是编码字符集的名称,也是对其进行编码的字符集的名称,而 EUC-JP 是对日语的 JIS X 0201、JIS X 0208 和 JIS X 0212 编码字符集进行编码的字符集的名称。

Java 编程语言的本机字符编码是 UTF-16。因此,Java 平台中的字符集定义了十六位 UTF-16 代码单元序列(即字符序列)和字节序列之间的映射。

相关推荐

15. 采访技巧
office365E5无限续期

15. 采访技巧

⏳ 09-02 👁️ 6133