|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.nio.charset.Charset
16 ビット Unicode 文字のシーケンスとバイトシーケンス間の指定マップです。このクラスは、デコーダやエンコーダを作成するメソッドや、文字セットに関連したさまざまな名前を取得するメソッドを定義します。このクラスのインスタンスは不変です。
このクラスは、ある文字セットがサポートされているかどうかをチェックしたり、文字セットのインスタンスを名前で検索したり、現在の Java 仮想マシンでサポートされているすべての文字セットを記載したマップを構築したりするための静的メソッドも定義します。新しい文字セットを追加したい場合は、CharsetProvider
クラスに定義されているサービスプロバイダインタフェースを使用します。
このクラスで定義されているすべてのメソッドは、複数の並行スレッドで安全に使用できます。
文字セット名は、次の文字を含む文字列で表されます。
文字セット名
文字セット名の最初の文字は、必ずアルファベットか数字になります。空の文字列は正当な文字セット名として認識されません。文字セット名ではアルファベットの大文字と小文字が区別されないので、2 つの文字セット名を比較する際、大文字と小文字の違いは無視されます。通常、文字セット名は、RFC 2278: IANA Charset Registration Procedures の規則に準拠します。
すべての文字セットには「標準名」があります。このほかに、いくつかの「別名」が存在する場合もあります。このクラスの 一部の文字セットには、以前のバージョンの Java プラットフォームとの互換性を考慮した「互換名」があります。互換名は、その文字セットの標準名か別名になります。 IANA Charset Registry に記載されている文字セットを Java プラットフォームの実装がサポートする場合、その文字セットの標準名はレジストリ内の名前になります。文字セットの多くはレジストリ内に複数の名前を持っています。この場合、レジストリは、いずれかの名前を「MIME 優先」とします。このように、文字セットが複数のレジストリ名を持っている場合、MIME 優先名が標準名となり、その他のレジストリ名は有効な別名となります。サポートされている文字セットが IANA レジストリに記載されていない場合、標準名は "X-" または "x-" で始まる文字列になります。
IANA 文字セットレジストリの内容は、時間の経過とともに変化します。これに伴い、文字セットの標準名や別名も変化します。互換性を確保する必要がある場合は、文字セットの別名を削除しないこと、文字セットの標準名が変わった場合は元の標準名を別名として追加することをお勧めします。
Java プラットフォームの実装はすべて次の標準文字セットをサポートする必要があります。サポートされているその他の文字セットについては、実装のリリースノートを参照してください。
UTF-8 文字セットは、RFC 2279 に記載されています。この変換形式は、ISO 10646-1 の Amendment 2 に準拠しており、Unicode Standard, Version 3.0 (amended) の § 3.8 にも記載されています。
UTF-16 文字セットは、RFC 2781 に記載されています。この変換形式は、ISO 10646-1 の Amendment 1 に準拠しており、Unicode Standard, Version 3.0 (amended) の § 3.8 にも記載されています。
UTF-16 文字セットは 16 ビットの量を使用するため、バイト順の影響を受けます。これらのエンコーディングでは、ストリームのバイト順は、Unicode 文字 '\uFEFF' の「バイト順マーク」で指定されます。バイト順マークの扱いは次のとおりです。
UTF-16BE 文字セットと UTF-16LE 文字セットは、デコードの際バイト順を無視する。エンコードの際はバイト順マークを書き込まない UTF-16 文字セットはバイト順マークを解釈し、ストリームのバイト順を指定するが、バイト順マークがない場合はビッグエンディアンバイト順に従う。エンコードの際はビッグエンディアンバイト順を使用し、ビッグエンディアンバイト順マークを書き込む Java 仮想マシンの各インスタンスには、デフォルトの文字セットがあります。この文字セットは、標準文字セットであるとはかぎりません。通常、デフォルトの文字セットは、仮想マシンの起動時に、ロケールや基本となるオペレーティングシステムが使用する文字セットによって決まります。 このクラスの名前は、RFC 2278 で使用されている用語に由来しています。RFC 2278 では、「文字セット」は、エンコード文字セットと文字セット方式の組み合わせとして定義されています。
「エンコード文字セット」は、抽象文字セットと整数セットのマッピングを表します。たとえば、US-ASCII、ISO 8859-1、JIS X 0201、完全 Unicode (ISO 10646-1 と同じ) などのエンコード文字セットがあります。
「文字セット方式」は、エンコード文字セットとオクテット (8 ビットバイト) シーケンスのマッピングを表します。たとえば、UTF-8、UCS-2、UTF-16、ISO 2022、EUC などの文字セット方式があります。多くのエンコーディング方式は、UTF-8 のような特定のエンコード文字セットに関連付けられており、もっぱら Unicode へエンコードするために使用されます。しかし、EUC のような複数の文字セットに関連付けられている一部の方式は、さまざまなアジア言語の文字セットへのエンコードにも使用できます。
エンコード文字セットと単一の文字セット方式だけを使用する場合は、文字セット名にちなんだ文字セット名が付けられます。それ以外の場合は、エンコーディング方式とサポートする文字セットのロケールにちなんだ名前になります。たとえば、US-ASCII は US-ASCII の文字セット名、EUC-JP は文字セット JIS X 0201、JIS X 0208、JIS X 0212 をエンコードする文字セットの名称になります。
Java プログラミング言語のネイティブエンコードされた文字セットは、Unicode バージョン 3.0 文字セットの最初の 17 プレーンのネイティブエンコードされた文字セット、すなわち、Unicode バージョン 1 の「基本多言語面 (BMP)」に Unicode バージョン 3 の次の 16 プレーンを追加したものになります。これは、Java 言語での文字の内部表現に UTF-16 エンコーディングを使用しているからです。UTF-16 エンコーディングは、BMP をは直接エンコードし、その他のプレーンは「サロゲートペア」という単純なエスケープメカニズムを使用してエンコードします。こうした理由から、Java プラットフォーム内の文字セットは、UTF-16 の 16 ビット値のシーケンスとバイトシーケンスのマップを定義します。
name
メソッドは標準名を返します。通常、標準名はアルファベットの大文字で記述されます。aliases
メソッドは、文字セットの別名を返します。
InputStreamReader
クラスと OutputStreamWriter
クラスの getEncoding() メソッドは、互換名を返します。
標準文字セット
US-ASCII
7 ビット ASCII (ISO646-US/Unicode charsetの Basic Latin ブロック)
ISO-8859-1
ISO Latin Alphabet No. 1 (ISO-LATIN-1)
UTF-8
8 ビット UCS 変換形式
UTF-16BE
16 ビット UCS 変換形式、ビッグエンディアンバイト順
UTF-16BE
16 ビット UCS 変換形式、リトルエンディアンバイト順
UTF-16
16 ビット UCS 変換形式、オプションのバイト順マークで識別されるバイト順
どちらの場合も、デコード処理の初期段階で読み取られたバイト順マークが、最終的な文字シーケンスに含まれることはありません。しかし、入力シーケンスの最初の要素のあとに入力されたバイト順マークは省略されません。これは、ZERO-WIDTH NON-BREAKING SPACE が同じコードで表現されるからです。用語
CharsetDecoder
,
CharsetEncoder
,
CharsetProvider
コンストラクタの概要 | |
protected |
Charset(String canonicalName,
String[] aliases)
標準名と別名のセットを使って、新しい文字セットを初期化します。 |
メソッドの概要 | |
Set |
aliases()
この文字セットの別名が含まれるセットを返します。 |
static SortedMap |
availableCharsets()
標準文字セット名から Charset オブジェクトへのソートされたマップを構築します。 |
boolean |
canEncode()
この文字セットがエンコードをサポートするかどうかを判断します。 |
int |
compareTo(Object ob)
この文字セットを別のオブジェクトと比較します。 |
abstract boolean |
contains(Charset cs)
この文字セットに指定された文字セットが含まれているかどうかを判断します。 |
CharBuffer |
decode(ByteBuffer bb)
この文字セットで表現されたバイトを Unicode 文字にデコードする簡易メソッドです。 |
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()
この文字セットを記述した文字列を返します。 |
クラス java.lang.Object から継承したメソッド |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
コンストラクタの詳細 |
protected Charset(String canonicalName, String[] aliases)
canonicalName
- この文字セットの標準名aliases
- この文字セットの別名から成る配列 (別名がない場合は null)
IllegalCharsetNameException
- 標準名または別名が不当である場合メソッドの詳細 |
public static boolean isSupported(String charsetName)
charsetName
- 要求された文字セットの名前 (標準名または別名)
IllegalCharsetNameException
- 指定された文字セット名が不当である場合public static Charset forName(String charsetName)
charsetName
- 要求された文字セットの名前 (標準名または別名)
IllegalCharsetNameException
- 指定された文字セット名が不当である場合
UnsupportedCharsetException
- 指定された文字セットを現在の Java 仮想マシンでは利用できない場合public static SortedMap availableCharsets()
このメソッドから返されるマップには、現在の Java 仮想マシンでサポートされている文字セットのエントリが記載されます。複数の文字セットがサポートされていて、これらに同じ標準名が付けられている場合、マップにはそのうち 1 つだけが記載されます。どの文字セットが記載されるかは指定されていません。
このメソッドを呼び出して取得したマップを利用すると、ディスクまたはネットワーク入出力操作に時間がかかることがあります。このメソッドは、使用可能なすべての文字セットを列挙する必要がある (ユーザに文字セットを選択させる場合など) アプリケーション向けです。forName
メソッドでは、このメソッドを使用せずに、効率のよい増分検索アルゴリズムを利用します。
現在の Java 仮想マシンが新しい文字セットプロバイダを動的に利用する場合、このメソッドは、毎回異なった結果を返します。文字セットプロバイダの変更がない場合は、forName
メソッドを使用した場合とまったく同じ文字セットを返します。
public final String name()
public final Set aliases()
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 の場合でも、指定された文字セットが現在の文字セットに含まれていることがあります。
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)
メソッドを直接使用することで検出できます。
public final ByteBuffer encode(String str)
このメソッドを文字セット cs に対して呼び出すと、次の式と同じ結果が得られます。
cs.encode(CharBuffer.wrap(s));
str
- エンコードする文字列
public final int compareTo(Object ob)
文字セットは標準名順に並べられます (アルファベットの大文字と小文字は区別されない)。
Comparable
内の compareTo
ob
- このオブジェクトと比較するオブジェクト
public final int hashCode()
Object
内の hashCode
Object.equals(java.lang.Object)
,
Hashtable
public final boolean equals(Object ob)
2 つの文字セットは、同じ標準名を持っている場合にかぎり等価です。文字セットがほかの型のオブジェクトと等価になることはありません。
Object
内の equals
ob
- 比較対象の参照オブジェクト
Object.hashCode()
,
Hashtable
public final String toString()
Object
内の toString
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.