JavaTM Platform
Standard Ed. 6

java.nio.charset
クラス Charset

java.lang.Object
  上位を拡張 java.nio.charset.Charset
すべての実装されたインタフェース:
Comparable<Charset>

public abstract class Charset
extends Object
implements Comparable<Charset>

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

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

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

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 コード単位のシーケンスとバイトシーケンスとの間のマッピングを定義します。

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

コンストラクタの詳細

Charset

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

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

isSupported

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

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

forName

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

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

availableCharsets

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

このメソッドから返されるマップには、現在の Java 仮想マシンでサポートされている各文字セットごとにエントリが 1 つずつ含まれます。サポートされている文字セットのなかに同じ正規名を持つものが複数存在した場合、結果として得られるマップにはそのうちの 1 つだけが含まれます。 ただし、どちらの文字セットが含まれるかは未定です。

 

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

新しい文字セットプロバイダが現在の Java 仮想マシンに対して動的に利用可能になる場合、このメソッドは毎回異なった結果を返す可能性があります。そうした変更が発生しない場合は、このメソッドから返される文字セットは、forName メソッドから取得可能な文字セットとまったく同じになります。

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

defaultCharset

public static Charset defaultCharset()
この Java 仮想マシンのデフォルトの文字セットを返します。  

デフォルトの文字セットは仮想マシンの起動時に決定されますが、それは通常、オペレーティングシステムのロケールと文字セットによって決まります。

戻り値:
デフォルトの文字セットの Charset オブジェクト
導入されたバージョン:
1.5

name

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

戻り値:
この文字セットの正規名

aliases

public final Set<String> 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 バッファー
戻り値:
デコードされた文字を格納する文字バッファー

encode

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

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

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

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

パラメータ:
cb - エンコードされる文字バッファー
戻り値:
エンコードされた文字を格納する byte バッファー

encode

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

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

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

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

compareTo

public final int compareTo(Charset that)
この文字セットと別の文字セットを比較します。  

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

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

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 Platform
Standard Ed. 6

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

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。