モジュール java.base
パッケージ 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クラスに定義されているサービス・プロバイダ・インタフェースを使用します。

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

文字セット名

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

  • 大文字'A'から'Z' ('\u0041'から'\u005a')、
  • 小文字'a'から'z' ('\u0061'から'\u007a')、
  • 数字'0'から'9' ('\u0030'から'\u0039')
  • ダッシュ文字'-' ('\u002d', HYPHEN-MINUS)、
  • プラス文字'+' ('\u002b', 「プラス記号」)、
  • ピリオド文字'.' ('\u002e', FULL STOP)、
  • コロン文字':' ('\u003a', COLON)および
  • アンダースコア文字'_' ('\u005f', LOW LINE)。
文字セット名の最初の文字は、必ずアルファベットか数字になります。 空の文字列は正当な文字セット名として認識されません。 文字セット名ではアルファベットの大文字と小文字が区別されないので、2つの文字セット名を比較する際、大文字と小文字の違いは無視されます。 通常、文字セット名はRFC 2278: IANA Charset Registration Proceduresの規則に準拠します。

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

一部の文字セットには、以前のバージョンのJavaプラットフォームとの互換性のために定義された履歴名があります。 文字セット履歴名は、標準名またはその別名のいずれかです。 履歴名は、InputStreamReaderおよびOutputStreamWriterクラスのgetEncoding()メソッドによって返されます。

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

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

標準文字セット

Javaプラットフォームを実装するたびに、次の標準文字セットをサポートする必要があります。 他の文字セットがサポートされているかどうかを確認するには、実装のリリース・ドキュメントを参照してください。 そうしたオプションの文字セットの動作は実装ごとに異なる可能性があります。

標準文字セットの説明
Charset説明
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-32BE 32ビットUCS変換フォーマット、ビッグ・エンディアン・バイト順
UTF-32LE 32ビットUCS変換フォーマット、リトル・エンディアン・バイト順
UTF-32 32ビットUCS変換形式、オプションのバイト順序マークで識別されるバイト順序

UTF-8文字セットは、RFC 2279で指定されます。この文字セットが基づく変換形式は、ISO 10646-1で指定され、Unicode標準でも説明されています。

UTF-16文字セットは、RFC 2781で指定されます。変換形式は、ISO 10646-1で指定され、Unicode標準でも説明されています。

UTF-32文字セットは、ISO 10646-1で指定されている変換形式に基づいており、Unicode標準でも説明されています。

UTF-16およびUTF-32文字セットでは、それぞれ16ビットおよび32ビットの数量が使用されるため、バイト順序の影響を受けます。 これらのエンコーディングでは、ストリームのバイト順序は、Unicode文字U+FEFFで表される初期「バイト順マーク」で示されます。 バイト順マークの扱いは次のとおりです。

  • デコード時に、UTF-16BE, UTF-16LE, UTF-32BEおよびUTF-32LE文字セットは、最初のバイト順序マークをZERO-WIDTH NON-BREAKING SPACEとして解釈します。エンコーディング時には、バイト順序マークは書き込まれません。

  • デコード時に、UTF-16およびUTF-32文字セットは、入力ストリームの先頭にあるバイト順序マークを解釈して、ストリームのバイト順序を示しますが、バイト順序マークがない場合はデフォルトでビッグ・エンディアンになります。エンコーディング時には、ビッグ・エンディアン・バイト順序を使用し、ビッグ・エンディアン・バイト順序マークを書き込みます。

どちらの場合も、入力シーケンスの最初の要素の後に出現したバイト順マークは省略されません。これは、ZERO-WIDTH NON-BREAKING SPACEが同じコードで表現されるからです。

Java仮想マシンのすべてのインスタンスにはデフォルトの文字セットがあります。これは、実装固有の方法で変更されないかぎり、UTF-8です。 詳細は、defaultCharset()を参照してください。

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

導入されたバージョン:
1.4
外部仕様
関連項目: