|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.charset.Charset
public abstract class 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 でも説明されています。
UTF-16 文字セットは、RFC 2781 によって規定されています。 また、その変換形式は、ISO 10646-1 の Amendment 1 内で規定されており、Unicode Standard でも説明されています。
UTF-16 文字セットは 16 ビットの量を使用するため、バイト順の影響を受けます。これらのエンコーディングでは、ストリームのバイト順は、Unicode 文字 '\uFEFF' の「バイト順マーク」で指定されます。バイト順マークの扱いは次のとおりです。
デコードの際、UTF-16BE 文字セットと UTF-16LE 文字セットはバイト順マークを無視する。 エンコードの際はバイト順マークを書き込まない デコードの際、UTF-16 文字セットはバイト順マークを解釈してストリームのバイト順を決定するが、バイト順マークがない場合はビッグエンディアンバイト順を使用する。 エンコードの際は、ビッグエンディアンバイト順を使用し、ビッグエンディアンバイト順マークを書き込む Java 仮想マシンの各インスタンスには、デフォルトの文字セットがあります。 この文字セットは、標準文字セットであるとは限りません。デフォルトの文字セットは仮想マシンの起動時に決定されますが、それは通常オペレーティングシステムが使用しているロケールと文字セットによって決まります。 このクラスの名前は、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 を使えば、アジア地域のさまざまな文字集合の文字をエンコードできます。
コード化文字集合と文字エンコーディング方式とが 1 対 1 に対応している場合、通常はその文字集合の名前にちなんだ文字セット名が付けられます。 それ以外の場合は通常、エンコーディング方式 (とサポートする文字集合のロケール) にちなんだ名前が付けられます。したがって、US-ASCII の文字セット名は US-ASCII、JIS X 0201, JIS X 0208, and JIS X 0212 の各文字集合をエンコードする文字セットの名前は、EUC-JP となります。
Java プログラミング言語のネイティブの文字エンコーディング方式は、UTF-16 です。 したがって、Java プラットフォーム内の各文字セットは、16 ビットの UTF-16 コード単位のシーケンスとバイトシーケンスとの間のマッピングを定義します。
name
メソッドは正規名を返します。通常、正規名はアルファベットの大文字で記述されます。aliases
メソッドは、文字セットの別名を返します。
InputStreamReader
クラスと OutputStreamWriter
クラスの getEncoding() メソッドは、互換名を返します。
標準文字セット
US-ASCII
7 ビット ASCII (ISO646-US/Unicode 文字セットの Basic Latin ブロック) ISO-8859-1
ISO Latin Alphabet No. 1 (ISO-LATIN-1) UTF-8
8 ビット UCS Transformation Format UTF-16BE
16 ビット UCS 変換形式、ビッグエンディアンバイト順 UTF-16LE
16 ビット UCS 変換形式、リトルエンディアンバイト順 UTF-16
16 ビット UCS 変換形式、オプションのバイト順マークで識別されるバイト順
どちらの場合も、デコード処理の開始時にバイト順マークが読み取られた場合、そのマークは最終的な文字シーケンスから省かれます。しかし、入力シーケンスの最初の要素のあとに出現したバイト順マークは省略されません。 これは、ZERO-WIDTH NON-BREAKING SPACE が同じコードで表現されるからです。
用語
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()
この文字セットを説明する文字列を返します。 |
クラス 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
- 指定された文字セットが不正である場合
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 final Set<String> 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)
メソッドを直接使用してください。
cb
- エンコードされる文字バッファー
public final ByteBuffer encode(String str)
このメソッドを文字セット cs に対して呼び出すと、次の式と同じ結果が得られます。
cs.encode(CharBuffer.wrap(s));
str
- エンコードされる文字列
public final int compareTo(Charset that)
文字セットは正規名順に並べられます (アルファベットの大文字と小文字は区別されない)。
Comparable<Charset>
内の compareTo
that
- この文字セットと比較する文字セット
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 Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。