- 所有已实现的接口:
Comparable<Charset>
此类还定义了静态方法,用于测试是否支持特定字符集、按名称定位字符集实例以及构建包含当前 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).
每个字符集都有一个规范名称也可能有一个或多个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-1ISO 拉丁字母编号 1,又名 ISO-LATIN-1UTF-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字节序标记。
Java 虚拟机的每个实例都有一个默认字符集,即 UTF-8 除非以特定于实现的方式进行更改。有关详细信息,请参阅 defaultCharset() 。
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 代码单元序列(即字符序列)和字节序列之间的映射。
- 自从:
- 1.4
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述aliases()返回包含此字符集别名的集合。构造一个从规范字符集名称到字符集对象的排序映射。boolean告知此字符集是否支持编码。final int将此字符集与另一个字符集进行比较。abstract boolean告知此字符集是否包含给定的字符集。final CharBufferdecode(ByteBuffer bb) 将此字符集中的字节解码为 Unicode 字符的便捷方法。static Charset返回此 Java 虚拟机的默认字符集。返回此字符集的默认locale的人类可读名称。displayName(Locale locale) 返回给定locale的此字符集的人类可读名称。final ByteBuffer在此字符集中将字符串编码为字节的便捷方法。final ByteBufferencode(CharBuffer cb) 在此字符集中将 Unicode 字符编码为字节的便捷方法。final boolean告诉这个对象是否等于另一个。static Charset返回指定字符集的字符集对象。static Charset返回指定字符集的字符集对象。final inthashCode()计算此字符集的哈希码。final boolean告知此字符集是否已在 IANA 字符集注册表 中注册。static booleanisSupported(String charsetName) 告知是否支持指定的字符集。final Stringname()返回此字符集的规范名称。abstract CharsetDecoder为此字符集构造一个新的解码器。abstract CharsetEncoder为此字符集构造一个新的编码器。final StringtoString()返回描述此字符集的字符串。
-
构造方法详细信息
-
Charset
使用给定的规范名称和别名集初始化新的字符集。- 参数:
canonicalName- 此字符集的规范名称aliases- 此字符集别名的数组,如果没有别名则为 null- 抛出:
IllegalCharsetNameException- 如果规范名称或任何别名是非法的
-
-
方法详情
-
isSupported
告知是否支持指定的字符集。- 参数:
charsetName- 请求的字符集名称;可以是规范名称或别名- 返回:
true当且仅当当前 Java 虚拟机支持命名字符集- 抛出:
IllegalCharsetNameException- 如果给定的字符集名称是非法的IllegalArgumentException- 如果给定的charsetName为空
-
forName
返回指定字符集的字符集对象。- 参数:
charsetName- 请求的字符集名称;可以是规范名称或别名- 返回:
- 命名字符集的字符集对象
- 抛出:
IllegalCharsetNameException- 如果给定的字符集名称是非法的IllegalArgumentException- 如果给定的charsetName为空UnsupportedCharsetException- 如果在此 Java 虚拟机实例中不支持命名字符集
-
forName
返回指定字符集的字符集对象。如果指定字符集的字符集对象不可用或charsetName不是合法的字符集名称,则返回fallback。- 参数:
charsetName- 请求的字符集名称;可以是规范名称或别名fallback- 在命名字符集的字符集对象不可用或charsetName不是合法字符集名称的情况下回退字符集。可能是null- 返回:
-
命名字符集的字符集对象,或
fallback,以防命名字符集的字符集对象不可用或charsetName不是合法的字符集名称 - 抛出:
IllegalArgumentException- 如果给定的charsetName是null- 自从:
- 18
-
availableCharsets
构造一个从规范字符集名称到字符集对象的排序映射。对于当前 Java 虚拟机支持的每个字符集,此方法返回的映射将有一个条目。如果两个或多个受支持的字符集具有相同的规范名称,则生成的映射将仅包含其中一个;未指定它将包含哪一个。
调用此方法以及随后使用生成的映射可能会导致发生耗时的磁盘或网络 I/O 操作。此方法是为需要枚举所有可用字符集的应用程序提供的,例如允许用户选择字符集。
forName方法不使用此方法,而是采用高效的增量查找算法。如果新的字符集提供程序动态地可用于当前 Java 虚拟机,则此方法可能会在不同的时间返回不同的结果。在没有此类更改的情况下,此方法返回的字符集正是可以通过
forName方法检索的字符集。- 返回:
- 从规范字符集名称到字符集对象的不可变、不区分大小写的映射
-
defaultCharset
返回此 Java 虚拟机的默认字符集。默认字符集是
UTF-8,除非以特定于实现的方式更改。- 实现注意事项:
-
实现可以在命令行上使用系统属性
file.encoding覆盖默认字符集。如果值为COMPAT,则默认字符集派生自native.encoding系统属性,这通常取决于底层操作系统的区域设置和字符集。 - 返回:
- 默认字符集的字符集对象
- 自从:
- 1.5
- 参见:
-
name
返回此字符集的规范名称。- 返回:
- 此字符集的规范名称
-
aliases
返回包含此字符集别名的集合。- 返回:
- 此字符集的别名的一组不可变的
-
displayName
返回此字符集的默认locale的人类可读名称。此方法的默认实现仅返回此字符集的规范名称。此类的具体子类可以重写此方法以提供本地化的显示名称。
- 返回:
- 此字符集在默认locale中的显示名称
-
isRegistered
public final boolean isRegistered()告知此字符集是否已在 IANA 字符集注册表 中注册。- 返回:
true当且仅当其实现者知道此字符集已在 IANA 注册
-
displayName
返回给定locale的此字符集的人类可读名称。此方法的默认实现仅返回此字符集的规范名称。此类的具体子类可以重写此方法以提供本地化的显示名称。
- 参数:
locale- 要检索其显示名称的locale- 返回:
- 此字符集在给定locale中的显示名称
-
contains
告知此字符集是否包含给定的字符集。字符集C据说包含字符集D当且仅当每个字符在D也可以表示在C.如果这种关系成立,那么可以保证可以编码的每个字符串D也可以编码为C无需执行任何替换。
那CcontainsD并不意味着每个字符都可以表示C由一个特定的字节序列表示D通过相同的字节序列,虽然有时是这种情况。
每个字符集都包含自己。
此方法计算包含关系的近似值:如果它返回
true,则已知给定字符集包含在该字符集中;但是,如果它返回false,则给定字符集不一定不包含在此字符集中。- 参数:
cs- 给定的字符集- 返回:
true如果给定的字符集包含在此字符集中
-
newDecoder
为此字符集构造一个新的解码器。- 返回:
- 此字符集的新解码器
-
newEncoder
为此字符集构造一个新的编码器。- 返回:
- 此字符集的新编码器
- 抛出:
UnsupportedOperationException- 如果这个字符集不支持编码
-
canEncode
public boolean canEncode()告知此字符集是否支持编码。几乎所有的字符集都支持编码。主要异常是特殊用途自动侦测其解码器可以通过检查输入字节序列来确定正在使用几种可能的编码方案中的哪一种的字符集。此类字符集不支持编码,因为无法确定应在输出中使用哪种编码。此类字符集的实现应覆盖此方法以返回
false。- 返回:
true当且仅当此字符集支持编码
-
decode
将此字符集中的字节解码为 Unicode 字符的便捷方法。在字符集
cs上调用此方法返回与表达式相同的结果cs.newDecoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .decode(bb);除了它可能更有效,因为它可以在连续调用之间缓存解码器。此方法始终用此字符集的默认替换字节数组替换格式错误的输入和不可映射的字符序列。为了检测这样的序列,直接使用
CharsetDecoder.decode(java.nio.ByteBuffer)方法。- 参数:
bb- 要解码的字节缓冲区- 返回:
- 包含解码字符的字符缓冲区
-
encode
在此字符集中将 Unicode 字符编码为字节的便捷方法。在字符集
cs上调用此方法返回与表达式相同的结果cs.newEncoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .encode(bb);除了它可能更有效,因为它可以在连续调用之间缓存编码器。此方法始终用此字符集的默认替换字符串替换格式错误的输入和不可映射的字符序列。为了检测这样的序列,直接使用
CharsetEncoder.encode(java.nio.CharBuffer)方法。- 参数:
cb- 要编码的字符缓冲区- 返回:
- 包含编码字符的字节缓冲区
-
encode
在此字符集中将字符串编码为字节的便捷方法。在字符集
cs上调用此方法返回与表达式相同的结果cs.encode(CharBuffer.wrap(s));
- 参数:
str- 要编码的字符串- 返回:
- 包含编码字符的字节缓冲区
-
compareTo
将此字符集与另一个字符集进行比较。字符集按其规范名称排序,不考虑大小写。
- 指定者:
compareTo在接口Comparable<Charset>中- 参数:
that- 此字符集要与之比较的字符集- 返回:
- 负整数、零或正整数,因为此字符集小于、等于或大于指定的字符集
-
hashCode
public final int hashCode()计算此字符集的哈希码。 -
equals
告诉这个对象是否等于另一个。当且仅当它们具有相同的规范名称时,两个字符集才相等。字符集永远不等于任何其他类型的对象。
-
toString
返回描述此字符集的字符串。
-