public abstract class Charset
extends Object
implements Comparable<Charset>
java.lang.Object | |
↳ | java.nio.charset.Charset |
16位Unicode code units序列与字节序列之间的命名映射。 该类定义了创建解码器和编码器以及检索与字符集关联的各种名称的方法。 这个类的实例是不可变的。
该类还定义了静态方法,用于测试是否支持特定字符集,如何按名称查找字符集实例以及如何构建包含当前Java虚拟机中支持的每个字符集的映射。 支持新的字符集可以通过CharsetProvider
类中定义的服务提供者接口添加。
字符集由以下字符组成的字符串命名:
每个字符集都有一个规范名称 ,也可能有一个或多个别名 。 规范名称由name
方法返回。 按照惯例,规范名称通常是大写字母。 字符集的别名由aliases
方法返回。
Some charsets have an historical name that is defined for compatibility with previous versions of the Java platform. A charset's historical name is either its canonical name or one of its aliases. The historical name is returned by the getEncoding() methods of the
InputStreamReader
和OutputStreamWriter
类。
If a charset listed in the IANA Charset Registry由Java平台的实现支持,其规范名称必须是注册表中列出的名称。 许多字符集在注册表中都有多个名称,在这种情况下,注册表将其中一个名称标识为MIME首选 。 如果charset具有多个注册表名称,则其规范名称必须是MIME首选名称,并且注册表中的其他名称必须是有效的别名。 如果受支持的字符集未在IANA注册表中列出,则其规范名称必须以字符串"X-"或"x-"之一开头 。
IANA字符集注册表的确会随着时间而改变,所以规范的名称和特定字符集的别名也可能随着时间而改变。 为了确保兼容性,建议不要从charset中删除别名,并且如果charset的规范名称已更改,则将其以前的规范名称设置为别名。
Java平台的每个实现都需要支持以下标准字符集。 请参阅您的实施的发行文档以查看是否支持其他任何字符集。 这些可选字符集的行为可能因实现而有所不同。
字符集
描述
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1 UTF-8 Eight-bit UCS Transformation Format UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
The UTF-8 charset is specified by RFC 2279 ; 它所基于的转换格式在ISO 10646-1的修正2中进行了规定,并且也在Unicode Standard中进行了描述 。
UTF-16字符集由RFC 2781指定; 它们所基于的转换格式在ISO 10646-1的修正1中进行了规定,并且也在Unicode Standard中进行了描述 。
UTF-16字符集使用16位数字,因此对字节顺序很敏感。 在这些编码中,流的字节顺序可以由Unicode字符'\uFEFF'表示的初始字节顺序标记 指示 。 字节顺序标记处理如下:
解码时, UTF-16BE和UTF-16LE字符集将初始字节顺序标记解释为零 宽度非破坏空间 ; 编码时,它们不写字节顺序标记。
解码时, UTF-16字符集将解释输入流开始处的字节顺序标记,以指示流的字节顺序,但如果没有字节顺序标记,则默认为big-endian; 编码时,它使用big-endian字节顺序并写入一个big-endian字节顺序标记。
Java虚拟机的每个实例都有一个默认字符集,可能是也可能不是标准字符集之一。 默认字符集是在虚拟机启动期间确定的,通常取决于底层操作系统正在使用的语言环境和字符集。
StandardCharsets
类为每个标准字符集定义了常量。
本课程的名称取自RFC 2278中使用的术语 。 在该文档中, 字符集被定义为一个或多个编码字符集与字符编码方案的组合。 (这个定义很混乱;一些其他软件系统将charset定义为编码字符集的同义词。)
编码字符集是一组抽象字符和一组整数之间的映射。 US-ASCII,ISO 8859-1,JIS X 0201和Unicode是编码字符集的例子。
一些标准已经将字符集定义为简单的一组抽象字符而没有相关的分配编号。 字母表就是这种字符集的一个例子。 然而, 字符集和编码字符集之间的细微差别在实践中很少使用; 前者已经成为后者的简写形式,包括Java API规范。
字符编码方案是一个或多个编码字符集与一组八位字节(八位字节)序列之间的映射。 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平台中的字符集因此定义了16位UTF-16码单元(即,字符序列)和字节序列之间的映射。
Protected constructors |
|
---|---|
Charset(String canonicalName, String[] aliases) 使用给定的规范名称和别名集初始化新的字符集。 |
Public methods |
|
---|---|
final Set<String> |
aliases() 返回包含此字符集别名的集合。 |
static SortedMap<String, Charset> |
availableCharsets() 构造从规范字符集名称到字符集对象的有序映射。 |
boolean |
canEncode() 告诉这个字符集是否支持编码。 |
final int |
compareTo(Charset that) 将这个字符集与另一个字符比较。 |
abstract boolean |
contains(Charset cs) 告诉这个字符集是否包含给定的字符集。 |
final CharBuffer |
decode(ByteBuffer bb) 将此字符集中的字节解码为Unicode字符的便捷方法。 |
static Charset |
defaultCharset() 返回此Java虚拟机的默认字符集。 |
String |
displayName() 返回此字符集的默认语言环境的人类可读名称。 |
String |
displayName(Locale locale) 为给定语言环境返回此字符集的人类可读名称。 |
final ByteBuffer |
encode(String str) 在此字符集中将字符串编码为字节的便捷方法。 |
final ByteBuffer |
encode(CharBuffer cb) 在此字符集中将Unicode字符编码为字节的便捷方法。 |
final boolean |
equals(Object ob) 告诉这个对象是否与另一个对象相等。 |
static Charset |
forName(String charsetName) 返回指定字符集的字符集对象。 |
final int |
hashCode() 计算此字符集的哈希码。 |
final boolean |
isRegistered() 告诉这个字符集是否在 IANA Charset Registry中注册。 |
static boolean |
isSupported(String charsetName) 告诉是否支持指定的字符集。 |
final String |
name() 返回此字符集的规范名称。 |
abstract CharsetDecoder |
newDecoder() 为这个字符集构造一个新的解码器。 |
abstract CharsetEncoder |
newEncoder() 为这个字符集构造一个新的编码器。 |
final String |
toString() 返回描述此字符集的字符串。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
Charset (String canonicalName, String[] aliases)
使用给定的规范名称和别名集初始化新的字符集。
Parameters | |
---|---|
canonicalName |
String : The canonical name of this charset |
aliases |
String : An array of this charset's aliases, or null if it has no aliases |
Throws | |
---|---|
IllegalCharsetNameException |
If the canonical name or any of the aliases are illegal |
Set<String> aliases ()
返回包含此字符集别名的集合。
Returns | |
---|---|
Set<String> |
An immutable set of this charset's aliases |
SortedMap<String, Charset> availableCharsets ()
构造从规范字符集名称到字符集对象的有序映射。
此方法返回的映射对于当前Java虚拟机中可用的每个字符集都有一个条目。 如果两个或更多支持的字符集具有相同的规范名称,则结果地图将只包含其中的一个; 哪一个它将包含未指定。
调用此方法以及随后使用生成的映射可能会导致耗时的磁盘或网络I / O操作发生。 该方法是为需要枚举所有可用字符集的应用程序提供的,例如允许用户选择字符集。 forName
方法不使用此方法,而是使用高效的增量查找算法。
如果将新的字符集提供程序动态提供给当前的Java虚拟机,则此方法可能会在不同的时间返回不同的结果。 在没有这种变化的情况下,这种方法返回的字符集正是那些可以通过forName
方法检索的字符集。
Returns | |
---|---|
SortedMap<String, Charset> |
An immutable, case-insensitive map from canonical charset names to charset objects |
boolean canEncode ()
告诉这个字符集是否支持编码。
几乎所有的字符集都支持编码。 主要的例外是特殊用途的自动检测字符集,其解码器可以通过检查输入字节序列来确定正在使用几种可能编码方案中的哪一种。 这样的字符集不支持编码,因为没有办法确定应该在输出上使用哪种编码。 这些字符集的实现应该重写此方法以返回false 。
Returns | |
---|---|
boolean |
true if, and only if, this charset supports encoding |
int compareTo (Charset that)
将这个字符集与另一个字符比较。
字符集按其规范名称排序,而不考虑大小写。
Parameters | |
---|---|
that |
Charset : The charset to which this charset is to be compared |
Returns | |
---|---|
int |
A negative integer, zero, or a positive integer as this charset is less than, equal to, or greater than the specified charset |
boolean contains (Charset cs)
告诉这个字符集是否包含给定的字符集。
如果并且只有在D中可表示的每个字符也可以用C表示,则字符集C被认为包含字符集D. 如果这种关系成立,则保证每个可以在D中编码的字符串也可以用C编码,而不用执行任何替换。
C包含 D并不意味着每个可由 C表示的特定字节序列的字符在 D中由相同的字节序列表示,尽管有时情况如此。
每个charset都包含它自己。
此方法计算包含关系的近似值:如果返回true,那么已知此字符集包含给定的字符集; 但是,如果它返回false ,那么不一定是这个字符集中不包含给定的字符集。
Parameters | |
---|---|
cs |
Charset
|
Returns | |
---|---|
boolean |
true if the given charset is contained in this charset |
CharBuffer decode (ByteBuffer bb)
将此字符集中的字节解码为Unicode字符的便捷方法。
在字符集 cs上调用此方法将返回与表达式相同的结果
cs.newDecoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .decode(bb);except that it is potentially more efficient because it can cache decoders between successive invocations.
This method always replaces malformed-input and unmappable-character sequences with this charset's default replacement byte array. In order to detect such sequences, use the decode(java.nio.ByteBuffer)
method directly.
Parameters | |
---|---|
bb |
ByteBuffer : The byte buffer to be decoded |
Returns | |
---|---|
CharBuffer |
A char buffer containing the decoded characters |
Charset defaultCharset ()
返回此Java虚拟机的默认字符集。
默认字符集是在虚拟机启动时确定的,通常取决于底层操作系统的区域设置和字符集。
Returns | |
---|---|
Charset |
A charset object for the default charset |
String displayName ()
返回此字符集的默认语言环境的人类可读名称。
这个方法的默认实现只是返回这个字符集的规范名称。 该类的具体子类可以重写此方法以提供本地化的显示名称。
Returns | |
---|---|
String |
The display name of this charset in the default locale |
String displayName (Locale locale)
为给定语言环境返回此字符集的人类可读名称。
这个方法的默认实现只是返回这个字符集的规范名称。 该类的具体子类可以重写此方法以提供本地化的显示名称。
Parameters | |
---|---|
locale |
Locale : The locale for which the display name is to be retrieved |
Returns | |
---|---|
String |
The display name of this charset in the given locale |
ByteBuffer encode (String str)
在此字符集中将字符串编码为字节的便捷方法。
在字符集 cs上调用此方法将返回与表达式相同的结果
cs.encode(CharBuffer.wrap(s));
Parameters | |
---|---|
str |
String : The string to be encoded |
Returns | |
---|---|
ByteBuffer |
A byte buffer containing the encoded characters |
ByteBuffer encode (CharBuffer cb)
在此字符集中将Unicode字符编码为字节的便捷方法。
在字符集 cs上调用此方法将返回与表达式相同的结果
cs.newEncoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .encode(bb);except that it is potentially more efficient because it can cache encoders between successive invocations.
此方法始终用此字符集的默认替换字符串替换格式错误的输入和不可映射字符序列。 为了检测这些序列,请直接使用encode(java.nio.CharBuffer)
方法。
Parameters | |
---|---|
cb |
CharBuffer : The char buffer to be encoded |
Returns | |
---|---|
ByteBuffer |
A byte buffer containing the encoded characters |
boolean equals (Object ob)
告诉这个对象是否与另一个对象相等。
如果且仅当它们具有相同的规范名称时,两个字符集才是相等的。 字符集永远不会与任何其他类型的对象相同。
Parameters | |
---|---|
ob |
Object : the reference object with which to compare. |
Returns | |
---|---|
boolean |
true if, and only if, this charset is equal to the given object |
Charset forName (String charsetName)
返回指定字符集的字符集对象。
Parameters | |
---|---|
charsetName |
String : The name of the requested charset; may be either a canonical name or an alias |
Returns | |
---|---|
Charset |
A charset object for the named charset |
Throws | |
---|---|
IllegalCharsetNameException |
If the given charset name is illegal |
IllegalArgumentException |
If the given charsetName is null |
UnsupportedCharsetException |
If no support for the named charset is available in this instance of the Java virtual machine |
boolean isRegistered ()
告诉这个字符集是否在 IANA Charset Registry中注册。
Returns | |
---|---|
boolean |
true if, and only if, this charset is known by its implementor to be registered with the IANA |
boolean isSupported (String charsetName)
告诉是否支持指定的字符集。
Parameters | |
---|---|
charsetName |
String : The name of the requested charset; may be either a canonical name or an alias |
Returns | |
---|---|
boolean |
true if, and only if, support for the named charset is available in the current Java virtual machine |
Throws | |
---|---|
IllegalCharsetNameException |
If the given charset name is illegal |
IllegalArgumentException |
If the given charsetName is null |
String name ()
返回此字符集的规范名称。
Returns | |
---|---|
String |
The canonical name of this charset |
CharsetDecoder newDecoder ()
为这个字符集构造一个新的解码器。
Returns | |
---|---|
CharsetDecoder |
A new decoder for this charset |
CharsetEncoder newEncoder ()
为这个字符集构造一个新的编码器。
Returns | |
---|---|
CharsetEncoder |
A new encoder for this charset |
Throws | |
---|---|
UnsupportedOperationException |
If this charset does not support encoding |
String toString ()
返回描述此字符集的字符串。
Returns | |
---|---|
String |
A string describing this charset |