public abstract class Charset extends Object implements Comparable<Charset>
また、このクラスには、ある文字セットがサポートされているかどうかのチェック、名前による文字セットのインスタンスの検索、および現在のJava仮想マシンでサポートされているすべての文字セットを記載したマップの構築をするための静的メソッドも定義されています。新しい文字セットを追加する場合は、CharsetProvider
クラスに定義されているサービス・プロバイダ・インタフェースを使用します。
このクラスで定義されているすべてのメソッドは、複数の並行スレッドで安全に使用できます。
文字セット名は、次の文字を含む文字列で表されます。
すべての文字セットには正規名があります。このほかに、1つ以上の別名が存在する場合もあります。このクラスのname
メソッドは正規名を返します。通常、正規名はアルファベットの大文字で記述されます。aliases
メソッドは文字セットの別名を返します。
一部の文字セットには、以前のバージョンのJavaプラットフォームとの互換性を考慮した互換名が含まれています。互換名は、その文字セットの正規名か別名になります。InputStreamReader
およびOutputStreamWriter
クラスのgetEncoding()メソッドは互換名を返します。
IANA Charset Registryに記載されている文字セットをJavaプラットフォームの実装がサポートする場合、その文字セットの正規名はレジストリ内の名前になります。文字セットの多くはレジストリ内に複数の名前を持っています。この場合、レジストリは、いずれかの名前をMIME優先とします。このように、文字セットが複数のレジストリ名を持っている場合、MIME優先名が正規名となり、その他のレジストリ名は有効な別名となります。サポートされている文字セットがIANAレジストリに記載されていない場合、正規名は"X-"または"x-"で始まる文字列になります。
IANA文字セット・レジストリの内容は、時間の経過とともに変化します。これに伴い、文字セットの正規名や別名も変化します。互換性を確保する必要がある場合は、文字セットの別名を削除しないこと、文字セットの正規名が変わった場合は元の正規名を別名として追加することをお薦めします。
Javaプラットフォームの実装は、すべて次の標準文字セットをサポートする必要があります。サポートされているその他の文字セットについては、実装のリリース・ノートを参照してください。そうしたオプションの文字セットの動作は実装ごとに異なる可能性があります。
文字セット 説明 US-ASCII 7ビットASCII (ISO646-US/Unicode文字セットのBasic Latinブロック) ISO-8859-1 ISOラテン・アルファベットNo. 1 (ISO-LATIN-1) UTF-8 8ビットUCS変換形式 UTF-16BE 16ビットUCS変換形式、ビッグエンディアン・バイト順 UTF-16LE 16ビットUCS変換形式、リトルエンディアン・バイト順 UTF-16 16ビットUCS変換形式、オプションのバイト順マークによって識別されるバイト順
UTF-8文字セットは、RFC 2279によって規定されています。また、その変換形式は、ISO 10646-1のAmendment 2内で規定されており、Unicode Standardでも説明されています。
UTF-16文字セットは、RFC 2781によって規定されています。また、その変換形式は、ISO 10646-1のAmendment 1内で規定されており、Unicode Standardでも説明されています。
UTF-16文字セットは16ビットの量を使用するため、バイト順の影響を受けます。これらのエンコーディングでは、ストリームのバイト順は、Unicode文字'\uFEFF'のバイト順マークで指定されます。バイト順マークの扱いは次のとおりです。
デコードの際、UTF-16BE文字セットとUTF-16LE文字セットは最初のバイト順マークをZERO-WIDTH NON-BREAKING SPACEとして解釈する。エンコードの際は、バイト順マークを書き込まない。
デコードの際、UTF-16文字セットは入力ストリームの最初のバイト順マークを解釈してストリームのバイト順を決定するが、バイト順マークがない場合はビッグエンディアン・バイト順を使用する。エンコードの際は、ビッグエンディアン・バイト順を使用し、ビッグエンディアン・バイト順マークを書き込む。
Java仮想マシンの各インスタンスには、デフォルトの文字セットがあります。この文字セットは、標準文字セットであるとは限りません。デフォルトの文字セットは仮想マシンの起動時に決定されますが、それは通常オペレーティング・システムが使用しているロケールと文字セットによって決まります。
StandardCharsets
クラスは、標準文字セットのそれぞれを表す定数を定義します。
このクラスの名前は、RFC 2278で使用されている用語に由来しています。このドキュメント内で、文字セットは1つ以上のコード化文字集合と文字エンコーディング方式の組み合わせとして定義されています。(この定義はわかりにくいため、文字セットをコード化文字集合の同義語として定義するソフトウェア・システムもあります。)
コード化文字集合は、抽象文字の集合と整数の集合間のマッピングを表します。コード化文字集合の例として、US-ASCII、ISO 8859-1、JIS X 0201、Unicodeなどがあります。
一部の標準は、文字セットを対応する割当て番号がない抽象文字の集合として定義しています。このような文字セットの例として、アルファベットがあります。ただし、文字セットとコード化文字集合の微妙な区別が実際に行われることはほとんどありません。Java APIも含めて、文字セットはコード化文字集合の短縮形になっています。
文字エンコーディング方式は、1つ以上のコード化文字集合とオクテット(8ビット・バイト)シーケンス間のマッピングです。文字エンコーディング方式の例として、UTF-8、UTF-16、ISO 2022、EUCなどがあります。エンコーディング方式は通常、特定のコード化文字集合に関連付けられます。たとえば、UTF-8は、Unicodeのエンコーディング専用です。エンコーディング方式の中には、複数のコード化文字集合に関連付けられるものもあります。たとえば、EUCを使えば、アジア地域のさまざまなコード化文字集合の文字をエンコードできます。
コード化文字集合と文字エンコーディング方式とが1対1に対応している場合、通常はそのコード化文字集合の名前にちなんだ文字セット名が付けられます。それ以外の場合は通常、エンコーディング方式(とサポートするコード化文字集合のロケール)にちなんだ名前が付けられます。したがって、US-ASCIIはコード化文字集合の名前であり、それをエンコードする文字セットの名前でもありますが、EUC-JPは日本語のJIS X 0201、JIS X 0208、およびJIS X 0212コード化文字集合をエンコードする文字セットの名前です。
Javaプログラミング言語のネイティブの文字エンコーディング方式は、UTF-16です。したがって、Javaプラットフォーム内の各文字セットは、16ビットのUTF-16コード単位のシーケンス(つまり、文字のシーケンス)とバイト・シーケンスとの間のマッピングを定義します。
CharsetDecoder
, CharsetEncoder
, CharsetProvider
, Character
修飾子 | コンストラクタと説明 |
---|---|
protected |
Charset(String canonicalName, String[] aliases)
正規名と別名のセットを使って、新しい文字セットを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
Set<String> |
aliases()
この文字セットの別名が含まれるセットを返します。
|
static SortedMap<String,Charset> |
availableCharsets()
正規文字セット名からCharsetオブジェクトへのソートされたマップを構築します。
|
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)
指定された文字セットのCharsetオブジェクトを返します。
|
int |
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
- この文字セットの別名から成る配列(別名がない場合はnull)IllegalCharsetNameException
- 正規名または別名が不正である場合public static boolean isSupported(String charsetName)
charsetName
- 要求された文字セットの名前。正規名か別名IllegalCharsetNameException
- 指定された文字セットが不正である場合IllegalArgumentException
- 指定されたcharsetNameがnullである場合public static Charset forName(String charsetName)
charsetName
- 要求された文字セットの名前。正規名か別名IllegalCharsetNameException
- 指定された文字セットが不正である場合IllegalArgumentException
- 指定されたcharsetNameがnullである場合UnsupportedCharsetException
- 指定された文字セットが現在のJava仮想マシンでは利用できない場合public static SortedMap<String,Charset> availableCharsets()
このメソッドから返されるマップには、現在のJava仮想マシンでサポートされている各文字セットごとにエントリが1つずつ含まれます。サポートされている文字セットのなかに同じ正規名を持つものが複数存在した場合、結果として得られるマップにはそのうちの1つだけが含まれます。ただし、どちらの文字セットが含まれるかは未定です。
このメソッドの呼び出しや、その結果として得られるマップを利用する際には、時間のかかるディスク入出力操作やネットワーク入出力操作が発生する可能性があります。このメソッドは、ユーザーに文字セットを選択させる場合など、使用可能なすべての文字セットを列挙する必要があるアプリケーション用として提供されています。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)
文字セットDで表現できるすべての文字を文字セットCでも表現できる場合に限り、文字セットCは文字セットDを含むと言うことができます。この関係が成立している場合、文字セットDにエンコードできるすべての文字列は、文字の置換えを一切行うことなく、文字セットCにもエンコードできます。
文字セット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に対して呼び出すと、次の式と同じ結果が返されます
cs.newDecoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .decode(bb);ただし、次の呼び出しまでの間にデコーダをキャッシュできるという点で、このメソッドのほうが効率的です。
このメソッドは、不正入力シーケンスやマップ不可文字シーケンスを、この文字セットのデフォルトの置換バイト配列で置き換えます。そのようなシーケンスを検出するには、CharsetDecoder.decode(java.nio.ByteBuffer)
メソッドを直接使用してください。
bb
- デコードされるbyteバッファpublic final ByteBuffer encode(CharBuffer cb)
このメソッドを文字セットcsに対して呼び出すと、次の式と同じ結果が返されます
cs.newEncoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .encode(bb);ただし、次の呼び出しまでの間にエンコーダをキャッシュできるという点で、このメソッドのほうが効率的です。
このメソッドは、不正入力シーケンスやマップ不可文字シーケンスを、この文字セットのデフォルトの置換文字列で置き換えます。そのようなシーケンスを検出するには、CharsetEncoder.encode(java.nio.CharBuffer)
メソッドを直接使用してください。
cb
- エンコードされるcharバッファpublic final ByteBuffer encode(String str)
このメソッドを文字セットcsに対して呼び出すと、次の式と同じ結果が返されます
cs.encode(CharBuffer.wrap(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)
2つの文字セットは、同じ正規名を持っている場合に限り等価です。文字セットがほかの型のオブジェクトと等価になることはありません。
equals
、クラス: Object
ob
- 比較対象の参照オブジェクト。Object.hashCode()
, HashMap
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.