public abstract class Charset extends Object implements Comparable<Charset>
这类还定义了静态方法来测试是否一个特定的字符集的支持,通过实例名称字符定位,为构建Map,包含每一个字符集,支持可在当前的java虚拟机。新的字符集的支持,可以通过增加在CharsetProvider
类定义的服务提供者接口。
字符集是由下列字符的字符串命名:
每一个字符都有规范名称,还可能有一个或多别名。规范名称是由这个类的name
方法返回。典型的名称是,按惯例,通常在大写的情况下。一个字符集的别名是由aliases
方法返回。
Some charsets have an historical name that is defined for compatibility with previous versions of the Java platform.字符集的历史名称是其典型的名字和它的别名。历史的名字被getEncoding()方法的InputStreamReader
和OutputStreamWriter
类。
if字符集在IANA Charset Registry上市是一个实现的java平台并规范其名称必须是名称注册表中列出的支持。许多字符集在注册表中会给出多个名字,在这种情况下,注册标识的名字之一作为MIME的首选。如果一个字符集有多个注册的名字然后规范其名称必须是MIME首选名称和注册表中的其他名称必须是有效的别名。如果支持的字符集是没有列在IANA注册后的规范名称必须从一个字符串"X-"或"x-"。
IANA字符注册表不随时间变化,因此规范名称和一个特定的字符集的别名也可以随着时间的变化而变化。为了确保兼容性建议没有别名永远从一个字符删除,而且如果一个字符集规范名称是改变以前的规范名称为化名。
Every implementation of the Java platform is required to support the following standard charsets.咨询发布文档为你实施看任何其他字符集的支持。这些可选的字符集的行为可能不同实现之间。
Charset 描述 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
的UTF-8 charset指定RFC 2279;转换格式后,它的基础是在ISO 10646-1 修正案2规定,也在Unicode Standard描述。
的UTF-16字符集指定的RFC 2781;转换格式的依据是ISO 10646-1 修正案1规定,也在Unicode Standard描述。
的UTF-16字符集使用十六位的数量是字节顺序因此敏感。在这些编码流的字节顺序可以由初始字节顺序标记的Unicode字符'\uFEFF'表示表示。字节顺序标记的处理如下:
在解码时的UTF-16BE和UTF-16LE字符集解释最初的字节顺序标记为zero-width non-breaking空间;编码时,他们不写字节顺序标记。
在解码时的UTF-16字符解释的字节顺序标记在输入流的开始表示流的字节顺序但默认大端如果没有字节顺序标记;当编码,它采用大端字节序和写一个大端字节顺序标记。
java虚拟机的每一个实例都有一个默认的字符集,这可能是也可能不是一个标准字符集。默认的字符集是虚拟机启动时确定,通常取决于区域设置的字符集被底层的操作系统使用。
的StandardCharsets
类定义为每个标准字符集的常数。
这个类的名字是取自用于RFC 2278条款。在文档的字符集定义为一个或多个编码字符集和字符编码方案的组合。(这个定义是混乱的;其他一些软件系统定义为编码字符集字符集同义词。)
一个编码字符集是一组抽象的人物和一个整数集之间的映射。 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平台的一个字符集,因此定义了十六位UTF-16代码单元序列之间的映射(即字符序列)和字节序列。
CharsetDecoder
,
CharsetEncoder
,
CharsetProvider
,
Character
Modifier | Constructor and Description |
---|---|
protected |
Charset(String canonicalName, String[] aliases)
初始化与给定的正则命名一个新的字符集和别名集。
|
Modifier and Type | Method and Description |
---|---|
Set<String> |
aliases()
返回一个包含该字符的别名。
|
static SortedMap<String,Charset> |
availableCharsets()
构造一个排序图从正则字符集名称字符对象。
|
boolean |
canEncode()
告诉这是否支持编码字符集。
|
int |
compareTo(Charset that)
比较该字符集到另一个。
|
abstract boolean |
contains(Charset cs)
告诉这是否包含给定的字符集的字符集。
|
CharBuffer |
decode(ByteBuffer bb)
方便的方法进行解码字节在这个字符集转换为Unicode字符。
|
static Charset |
defaultCharset()
返回该java虚拟机的默认字符集。
|
String |
displayName()
为默认区域返回该字符集的可读名称。
|
String |
displayName(Locale locale)
返回该字符集的可读名称为给定的现场。
|
ByteBuffer |
encode(CharBuffer cb)
方便的方法编码Unicode字符转换为该字符字节。
|
ByteBuffer |
encode(String str)
方便的编码方法,在这个字符到字节的字符串。
|
boolean |
equals(Object ob)
告诉这个对象是否等于另一个对象。
|
static Charset |
forName(String charsetName)
返回指定的字符集的字符集对象。
|
int |
hashCode()
计算出该字符集的hashCode。
|
boolean |
isRegistered()
告诉是否这个字符集是在
IANA Charset Registry注册。
|
static boolean |
isSupported(String charsetName)
告诉是否指定的字符集的支持。
|
String |
name()
返回该字符集的名称。
|
abstract CharsetDecoder |
newDecoder()
构建这个字符集新的解码器。
|
abstract CharsetEncoder |
newEncoder()
这一新的编码字符集的构建。
|
String |
toString()
返回一个描述该字符的字符串。
|
protected Charset(String canonicalName, String[] aliases)
canonicalName
-该字符集规范名称
aliases
-这个字符数组的别名,或空如果没有别名
IllegalCharsetNameException
如果规范名称或别名是非法的
public static boolean isSupported(String charsetName)
charsetName
-请求的字符集的名称;可以是一个名称或别名
IllegalCharsetNameException
-如果给定的字符集名称是非法的
IllegalArgumentException
-如果给定的
charsetName是空的
public static Charset forName(String charsetName)
charsetName
-请求的字符集的名称;可以是一个名称或别名
IllegalCharsetNameException
-如果给定的字符集名称是非法的
IllegalArgumentException
-如果给定的
charsetName是空的
UnsupportedCharsetException
-如果不支持指定的字符中的java虚拟机实例是可用的
public static SortedMap<String,Charset> availableCharsets()
Map返回此方法将每个字符集支持的是在目前的java虚拟机的一个入口。如果有两个或更多支持的字符集具有相同的名称然后得到的Map将包含只是其中之一;它将包含一个未指定。
此方法的调用,以及由此生成的映射的后续使用,可能会导致耗时的磁盘或网络I / O操作发生。这种方法对于需要枚举所有可用的字符集的应用,例如允许用户字符集的选择。该方法不受forName
使用的方法,而采用一种有效的增量查找算法。
这种方法可能会返回在不同时期如果新字符集商动态提供给当前的java虚拟机不同的结果。如果没有这些改变的字符集,该方法返回的是那些可以通过forName
方法。
public static Charset defaultCharset()
默认的字符集是虚拟机启动时确定,通常依赖于底层操作系统的区域设置和字符集。
public final String name()
public String displayName()
此方法的默认实现是返回该字符集的名称。此类的具体子类可以重写此方法,以提供一个本地化的显示名称。
public final boolean isRegistered()
public String displayName(Locale locale)
此方法的默认实现是返回该字符集的名称。此类的具体子类可以重写此方法,以提供一个本地化的显示名称。
locale
-现场的显示名称进行检索
public abstract boolean contains(Charset cs)
一个字符集C说包含字符集D如果,如果,每个字符表示D也表示,如果这种关系是那么可以保证每一个字符串,可以编码D也可以被编码在C不执行任何的替代品。
C包含D并不意味着每个字符由一个特定的字节序列的C表示的是代表D由相同的字节序列,虽然有时是这种情况。
每个字符集包含本身。
这种方法计算出的包含关系的一个近似:如果它返回true然后给定的字符集是由这个字符集包含;如果返回false,然而,这是不一定的情况下,给定的字符集不包含在这个字符集。
cs
-给定的字符集
public abstract CharsetDecoder newDecoder()
public abstract CharsetEncoder newEncoder()
UnsupportedOperationException
如果字符集不支持编码
public boolean canEncode()
几乎所有支持的编码字符集。主要的例外是专用自动检测字符集的解码器可以确定几个可能的编码方案是使用通过检查输入字节序列。这样的字符集不支持编码,因为没有办法确定它的编码应该用在输出。这些字符集的实现应重写此方法以返回false。
public final CharBuffer decode(ByteBuffer bb)
该方法在一个字符集cs调用返回的结果相同的表达
newdecoder() CS。。onmalformedinput(codingerroraction。代替)。onunmappablecharacter(codingerroraction。代替)解码(BB);除了它可能更有效,因为它可以缓存之间的连续调用解码器。
这种方法总是会替换格式不正确的输入,无法映射的字符序列,该字符集的默认置换的字节数组。为了检测这些序列,直接使用CharsetDecoder.decode(java.nio.ByteBuffer)
方法。
bb
-要解码的字节缓冲区
public final ByteBuffer encode(CharBuffer cb)
此方法的调用在一个字符集cs返回相同的结果作为表达
newencoder() CS。。onmalformedinput(codingerroraction。代替)。onunmappablecharacter(codingerroraction。代替)编码(BB);除了它可能更有效,因为它可以缓存之间的连续调用编码器。
这种方法总是会替换格式不正确的输入,无法映射的字符序列,该字符集的默认字符串替换。为了检测这些序列,直接使用CharsetEncoder.encode(java.nio.CharBuffer)
方法。
cb
-要编码的字符串缓冲区
public final ByteBuffer encode(String str)
此方法的调用在一个字符集cs返回相同的结果作为表达
CS。编码(CharBuffer。包(S));
str
-要编码的字符串
public final int compareTo(Charset that)
字符集是由他们的规范名称,有序,不考虑的情况下。
compareTo
接口
Comparable<Charset>
that
的字符集,这个字符集是比较
public final int hashCode()
hashCode
方法重写,继承类
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public final boolean equals(Object ob)
如果两个字符集都是平等的,只有当他们有相同的规范名称。字符集是绝不等同于任何其他类型的对象。
equals
方法重写,继承类
Object
ob
-参考对象的比较。
Object.hashCode()
,
HashMap
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.