JavaTM 2
Platform
Std. Ed. v1.4.0

java.nio.charset
クラス Charset

java.lang.Object
  |
  +--java.nio.charset.Charset
すべての実装インタフェース:
Comparable

public abstract class Charset
extends Object
implements Comparable

16 ビット Unicode 文字のシーケンスとバイトシーケンス間の指定マップです。このクラスは、デコーダやエンコーダを作成するメソッドや、文字セットに関連したさまざまな名前を取得するメソッドを定義します。このクラスのインスタンスは不変です。

このクラスは、ある文字セットがサポートされているかどうかをチェックしたり、文字セットのインスタンスを名前で検索したり、現在の Java 仮想マシンでサポートされているすべての文字セットを記載したマップを構築したりするための静的メソッドも定義します。新しい文字セットを追加したい場合は、CharsetProvider クラスに定義されているサービスプロバイダインタフェースを使用します。

このクラスで定義されているすべてのメソッドは、複数の並行スレッドで安全に使用できます。

文字セット名

文字セット名は、次の文字を含む文字列で表されます。

文字セット名の最初の文字は、必ずアルファベットか数字になります。空の文字列は正当な文字セット名として認識されません。文字セット名ではアルファベットの大文字と小文字が区別されないので、2 つの文字セット名を比較する際、大文字と小文字の違いは無視されます。通常、文字セット名は、
RFC 2278: IANA Charset Registration Procedures の規則に準拠します。

すべての文字セットには「標準名」があります。このほかに、いくつかの「別名」が存在する場合もあります。このクラスの name メソッドは標準名を返します。通常、標準名はアルファベットの大文字で記述されます。aliases メソッドは、文字セットの別名を返します。

一部の文字セットには、以前のバージョンの Java プラットフォームとの互換性を考慮した「互換名」があります。互換名は、その文字セットの標準名か別名になります。InputStreamReader クラスと OutputStreamWriter クラスの getEncoding() メソッドは、互換名を返します。

IANA Charset Registry に記載されている文字セットを Java プラットフォームの実装がサポートする場合、その文字セットの標準名はレジストリ内の名前になります。文字セットの多くはレジストリ内に複数の名前を持っています。この場合、レジストリは、いずれかの名前を「MIME 優先」とします。このように、文字セットが複数のレジストリ名を持っている場合、MIME 優先名が標準名となり、その他のレジストリ名は有効な別名となります。サポートされている文字セットが IANA レジストリに記載されていない場合、標準名は "X-" または "x-" で始まる文字列になります。

IANA 文字セットレジストリの内容は、時間の経過とともに変化します。これに伴い、文字セットの標準名や別名も変化します。互換性を確保する必要がある場合は、文字セットの別名を削除しないこと、文字セットの標準名が変わった場合は元の標準名を別名として追加することをお勧めします。

標準文字セット

Java プラットフォームの実装はすべて次の標準文字セットをサポートする必要があります。サポートされているその他の文字セットについては、実装のリリースノートを参照してください。

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 変換形式、オプションのバイト順マークで識別されるバイト順

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' の「バイト順マーク」で指定されます。バイト順マークの扱いは次のとおりです。

どちらの場合も、デコード処理の初期段階で読み取られたバイト順マークが、最終的な文字シーケンスに含まれることはありません。しかし、入力シーケンスの最初の要素のあとに入力されたバイト順マークは省略されません。これは、ZERO-WIDTH NON-BREAKING SPACE が同じコードで表現されるからです。

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 ビット値のシーケンスとバイトシーケンスのマップを定義します。

導入されたバージョン:
1.4
関連項目:
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
 

コンストラクタの詳細

Charset

protected Charset(String canonicalName,
                  String[] aliases)
標準名と別名のセットを使って、新しい文字セットを初期化します。

パラメータ:
canonicalName - この文字セットの標準名
aliases - この文字セットの別名から成る配列 (別名がない場合は null)
例外:
IllegalCharsetNameException - 標準名または別名が不当である場合
メソッドの詳細

isSupported

public static boolean isSupported(String charsetName)
指定された文字セットがサポートされているかどうかを判断します。

パラメータ:
charsetName - 要求された文字セットの名前 (標準名または別名)
戻り値:
現在の Java 仮想マシンで指定された文字セットを利用できる場合にかぎり true
例外:
IllegalCharsetNameException - 指定された文字セット名が不当である場合

forName

public static Charset forName(String charsetName)
指定された文字セットの Charset オブジェクトを返します。

パラメータ:
charsetName - 要求された文字セットの名前 (標準名または別名)
戻り値:
指定された文字セットの Charset オブジェクト
例外:
IllegalCharsetNameException - 指定された文字セット名が不当である場合
UnsupportedCharsetException - 指定された文字セットを現在の Java 仮想マシンでは利用できない場合

availableCharsets

public static SortedMap availableCharsets()
標準文字セット名から Charset オブジェクトへのソートされたマップを構築します。

このメソッドから返されるマップには、現在の Java 仮想マシンでサポートされている文字セットのエントリが記載されます。複数の文字セットがサポートされていて、これらに同じ標準名が付けられている場合、マップにはそのうち 1 つだけが記載されます。どの文字セットが記載されるかは指定されていません。

このメソッドを呼び出して取得したマップを利用すると、ディスクまたはネットワーク入出力操作に時間がかかることがあります。このメソッドは、使用可能なすべての文字セットを列挙する必要がある (ユーザに文字セットを選択させる場合など) アプリケーション向けです。forName メソッドでは、このメソッドを使用せずに、効率のよい増分検索アルゴリズムを利用します。

現在の Java 仮想マシンが新しい文字セットプロバイダを動的に利用する場合、このメソッドは、毎回異なった結果を返します。文字セットプロバイダの変更がない場合は、forName メソッドを使用した場合とまったく同じ文字セットを返します。

戻り値:
文字セットの標準名と Charset オブジェクトを対応付ける不変のマップ (アルファベットの大文字と小文字は区別される)

name

public final String name()
この文字セットの標準名を返します。

戻り値:
この文字セットの標準名

aliases

public final Set aliases()
この文字セットの別名が含まれるセットを返します。

戻り値:
この文字セットの別名が含まれる不変のセット

displayName

public String displayName()
デフォルトロケールにおける、この文字セットの名前 (可読形式) を返します。

このメソッドのデフォルト実装は、単純に、この文字セットの標準名を返します。このクラスの具象サブクラスは、地域対応の表示名を提供するため、このメソッドをオーバーライドします。

戻り値:
デフォルトロケールにおける、この文字セットの表示名

isRegistered

public final boolean isRegistered()
この文字セットが IANA Charset Registry に登録されているかどうかを判断します。

戻り値:
この文字セットが IANA に登録されていることを、実装者が認識している場合にかぎり true

displayName

public String displayName(Locale locale)
指定されたロケールにおける、この文字セットの名前 (可読形式) を返します。

このメソッドのデフォルト実装は、この文字セットの標準名だけを返します。このクラスの具象サブクラスは、地域対応の表示名を提供するため、このメソッドをオーバーライドします。

パラメータ:
locale - 表示名を取得するためのロケール
戻り値:
指定されたロケールにおけるこの文字セットの表示名

contains

public abstract boolean contains(Charset cs)
この文字セットに指定された文字セットが含まれているかどうかを判断します。

文字セット D で表現できるすべての文字を文字セット C でも表現できる場合にかぎり、文字セット C は文字セット D を「含む」と言うことができます。この関係が成立している場合、文字セット D にエンコードできるすべての文字列は、文字の置き換えを一切行うことなく、文字セット C にもエンコードできます。

文字セット C が文字セット D を「含む」と言っても、双方の文字セットが、個々の文字を表現するためにまったく同じバイトシーケンスを使用しているとはかぎりません。

すべての文字セットは、自身を包含しています。

このメソッドは、包含関係の近似値を計算します。このメソッドの戻り値が true であれば、指定された文字セットは確実に現在の文字セットに含まれています。ただし、戻り値が false の場合でも、指定された文字セットが現在の文字セットに含まれていることがあります。

戻り値:
指定された文字セットがこの文字セットに含まれている場合にかぎり true

newDecoder

public abstract CharsetDecoder newDecoder()
この文字セットの新しいデコーダを構築します。

戻り値:
この文字セットの新しいデコーダ

newEncoder

public abstract CharsetEncoder newEncoder()
この文字セットの新しいエンコーダを構築します。

戻り値:
この文字セットの新しいエンコーダ
例外:
UnsupportedOperationException - この文字セットがエンコードをサポートしない場合

canEncode

public boolean canEncode()
この文字セットがエンコードをサポートするかどうかを判断します。

ほとんどすべての文字セットはエンコードをサポートしていますが、これには例外もあります。たとえば、入力バイトシーケンスを調べて、複数のエンコーディング方式のうちどれが使用されているかを特定するようなデコーダを持つ、特殊な「自動検出」文字セットがあります。こうした文字セットは、出力時に使用されるエンコーディングを特定できないので、エンコードをサポートしません。この種の文字セットを実装すると、このメソッドがオーバーライドされ、戻り値が false になります。

戻り値:
この文字セットがエンコードをサポートする場合にかぎり true

decode

public final CharBuffer decode(ByteBuffer bb)
この文字セットで表現されたバイトを Unicode 文字にデコードする簡易メソッドです。;

このメソッドを文字セット cs に対して呼び出すと、次の式と同じ結果が得られます。

     cs.newDecoder()
       .onMalformedInput(CodingErrorAction.REPLACE)
       .onUnmappableCharacter(CodingErrorAction.REPLACE)
       .decode(bb); 
ただし、次の呼び出しまでの間にデコーダをキャッシュできるという点で、このメソッドのほうが効率的です。

このメソッドは、不正な入力やマップできない文字のシーケンスを、この文字セットのデフォルトの代替バイト 配列で置き換えます。こうしたシーケンスは、CharsetDecoder.decode(java.nio.ByteBuffer) メソッドを直接使用することで検出できます。

パラメータ:
bb - デコードする byte バッファ
戻り値:
デコードされた文字を含む char バッファ

encode

public final ByteBuffer encode(CharBuffer cb)
Unicode 文字をこの文字セットで表現されたバイトにエンコードする簡易メソッドです。

このメソッドを文字セット cs に対して呼び出すと、次の式と同じ結果が得られます。

     cs.newEncoder()
       .onMalformedInput(CodingErrorAction.REPLACE)
       .onUnmappableCharacter(CodingErrorAction.REPLACE)
       .encode(bb); 
ただし、次の呼び出しまでの間にエンコーダをキャッシュできるという点で、このメソッドのほうが効率的です。

このメソッドは、不正な入力やマップできない文字のシーケンスを、常にこの文字セットのデフォルトの置換文字列で置き換えます。こうしたシーケンスは、CharsetEncoder.encode(java.nio.CharBuffer) メソッドを直接使用することで検出できます。

戻り値:
エンコードされた文字を含む byte バッファ

encode

public final ByteBuffer encode(String str)
文字列をこの文字セットで表現されたバイトにエンコードする簡易メソッドです。

このメソッドを文字セット cs に対して呼び出すと、次の式と同じ結果が得られます。

     cs.encode(CharBuffer.wrap(s)); 

パラメータ:
str - エンコードする文字列
戻り値:
エンコードされた文字を含む byte バッファ

compareTo

public final int compareTo(Object ob)
この文字セットを別のオブジェクトと比較します。

文字セットは標準名順に並べられます (アルファベットの大文字と小文字は区別されない)。

定義:
インタフェース Comparable 内の compareTo
パラメータ:
ob - このオブジェクトと比較するオブジェクト
戻り値:
この文字セットが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数

hashCode

public final int hashCode()
この文字セットのハッシュコードを計算します。

オーバーライド:
クラス Object 内の hashCode
戻り値:
整数値で表されるハッシュコード
関連項目:
Object.equals(java.lang.Object), Hashtable

equals

public final boolean equals(Object ob)
このオブジェクトが別のオブジェクトと等価であるかどうかを判断します。

2 つの文字セットは、同じ標準名を持っている場合にかぎり等価です。文字セットがほかの型のオブジェクトと等価になることはありません。

オーバーライド:
クラス Object 内の equals
パラメータ:
ob - 比較対象の参照オブジェクト
戻り値:
この文字セットが指定されたオブジェクトと等価である場合にかぎり true
関連項目:
Object.hashCode(), Hashtable

toString

public final String toString()
この文字セットを記述した文字列を返します。

オーバーライド:
クラス Object 内の toString
戻り値:
この文字セットを記述した文字列

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

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.