- すべての実装されたインタフェース:
Comparable<Charset>
public abstract class Charset extends Object implements Comparable<Charset>
また、このクラスには、ある文字セットがサポートされているかどうかのチェック、名前による文字セットのインスタンスの検索、および現在のJava仮想マシンでサポートされているすべての文字セットを記載したマップの構築をするための静的メソッドも定義されています。 新しい文字セットを追加する場合は、CharsetProvider
クラスに定義されているサービス・プロバイダ・インタフェースを使用します。
このクラスで定義されているすべてのメソッドは、複数の並行スレッドで安全に使用できます。
文字セット名
文字セット名は、次の文字を含む文字列で表されます。
- 大文字の
'A'
-'Z'
('\u0041'
-'\u005a'
)、 - 小文字の
'a'
-'z'
('\u0061'
-'\u007a'
)、 - 数字の
'0'
-'9'
('\u0030'
-'\u0039'
)、 - ダッシュ文字
'-'
('\u002d'
、HYPHEN-MINUS) - プラス文字
'+'
('\u002b'
、PLUS SIGN) - ピリオド文字
'.'
('\u002e'
、FULL STOP) - コロン文字
':'
('\u003a'
、COLON) - 下線文字
'_'
('\u005f'
、LOW LINE)
すべての文字セットには正規名があります。このほかに、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-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
文字セットは最初のバイト順マークをZERO-WIDTH NON-BREAKING SPACEとして解釈する。エンコードの際は、バイト順マークを書き込まない。デコードの際、
UTF-16
文字セットは入力ストリームの最初のバイト順マークを解釈してストリームのバイト順を決定するが、バイト順マークがない場合はビッグエンディアン・バイト順を使用する。エンコードの際は、ビッグエンディアン・バイト順を使用し、ビッグエンディアン・バイト順マークを書き込む。
Java仮想マシンの各インスタンスには、デフォルトの文字セットがあります。この文字セットは、標準文字セットであるとは限りません。 デフォルトの文字セットは仮想マシンの起動時に決定されますが、それは通常オペレーティング・システムが使用しているロケールと文字セットによって決まります。
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
- 関連項目:
CharsetDecoder
,CharsetEncoder
,CharsetProvider
,Character
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型 メソッド 説明 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(String str)
文字列をこの文字セットで表現されたバイトにエンコードする簡易メソッドです。ByteBuffer
encode(CharBuffer cb)
Unicode文字をこの文字セットで表現されたバイトにエンコードする簡易メソッドです。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()
この文字セットを説明する文字列を返します。
-
コンストラクタの詳細
-
Charset
正規名と別名のセットを使って、新しい文字セットを初期化します。- パラメータ:
canonicalName
- この文字セットの正規名aliases
- この文字セットの別名から成る配列(別名がない場合はnull)- 例外:
IllegalCharsetNameException
- 正規名または別名が不正である場合
-
-
メソッドの詳細
-
isSupported
public static boolean isSupported(String charsetName)指定された文字セットがサポートされているかどうかを判断します。- パラメータ:
charsetName
- 要求された文字セットの名前。正規名か別名- 戻り値:
- 現在のJava仮想マシンで指定された文字セットを利用できる場合に限り
true
- 例外:
IllegalCharsetNameException
- 指定された文字セットが不正である場合IllegalArgumentException
- 指定されたcharsetName
がnullである場合
-
forName
指定された文字セットのCharsetオブジェクトを返します。- パラメータ:
charsetName
- 要求された文字セットの名前。正規名か別名- 戻り値:
- 指定された文字セットのCharsetオブジェクト
- 例外:
IllegalCharsetNameException
- 指定された文字セットが不正である場合IllegalArgumentException
- 指定されたcharsetName
がnullである場合UnsupportedCharsetException
- 指定された文字セットが現在のJava仮想マシンでは利用できない場合
-
availableCharsets
正規文字セット名からCharsetオブジェクトへのソートされたマップを構築します。このメソッドから返されるマップには、現在のJava仮想マシンでサポートされている各文字セットごとにエントリが1つずつ含まれます。 サポートされている文字セットのなかに同じ正規名を持つものが複数存在した場合、結果として得られるマップにはそのうちの1つだけが含まれます。ただし、どちらの文字セットが含まれるかは未定です。
このメソッドの呼び出しや、その結果として得られるマップを利用する際には、時間のかかるディスク入出力操作やネットワーク入出力操作が発生する可能性があります。 このメソッドは、ユーザーに文字セットを選択させる場合など、使用可能なすべての文字セットを列挙する必要があるアプリケーション用として提供されています。
forName
メソッドでは、このメソッドを使用せずに、効率の良い増分検索アルゴリズムを採用しています。新しい文字セット・プロバイダが現在のJava仮想マシンに対して動的に利用可能になる場合、このメソッドは毎回異なった結果を返す可能性があります。 そうした変更が発生しない場合は、このメソッドから返される文字セットは、
forName
メソッドから取得可能な文字セットとまったく同じになります。- 戻り値:
- 文字セットの正規名とCharsetオブジェクトを対応付ける不変のマップ(アルファベットの大文字と小文字は区別されない)
-
defaultCharset
public static Charset defaultCharset()このJava仮想マシンのデフォルトの文字セットを返します。デフォルトの文字セットは仮想マシンの起動時に決定されますが、それは通常、オペレーティング・システムのロケールと文字セットによって決まります。
- 戻り値:
- デフォルトの文字セットのCharsetオブジェクト
- 導入されたバージョン:
- 1.5
-
name
public final String name()この文字セットの正規名を返します。- 戻り値:
- この文字セットの正規名
-
aliases
この文字セットの別名が含まれるセットを返します。- 戻り値:
- この文字セットの別名が含まれる不変のセット
-
displayName
public String displayName()デフォルト・ロケールにおける、この文字セットの名前(人間が読める形式)を返します。このメソッドのデフォルト実装は、この文字セットの正規名だけを返します。 このクラスの具象サブクラスでこのメソッドをオーバーライドすれば、ローカライズされた表示名を提供できます。
- 戻り値:
- デフォルト・ロケールにおけるこの文字セットの表示名
-
isRegistered
public final boolean isRegistered()この文字セットがIANA Charset Registryに登録されているかどうかを判別します。- 戻り値:
- この文字セットがIANAに登録されていることを実装者が認識している場合に限り
true
-
displayName
指定ロケールにおけるこの文字セットの名前(人間が読める形式)を返します。このメソッドのデフォルト実装は、この文字セットの正規名だけを返します。 このクラスの具象サブクラスでこのメソッドをオーバーライドすれば、ローカライズされた表示名を提供できます。
- パラメータ:
locale
- 表示名を取得するロケール- 戻り値:
- 指定ロケールにおけるこの文字セットの表示名
-
contains
public abstract boolean contains(Charset cs)この文字セットに指定の文字セットが含まれているかどうかを判断します。文字セットDで表現できるすべての文字を文字セットCでも表現できる場合に限り、文字セットCは文字セットDを含むと言うことができます。 この関係が成立している場合、文字セットDにエンコードできるすべての文字列は、文字の置換えを一切行うことなく、文字セットCにもエンコードできます。
文字セットCが文字セットDを「含む」と言っても、双方の文字セットが、個々の文字を表現するためにまったく同じバイト・シーケンスを使用しているとは限りません。
すべての文字セットは、自身を包含しています。
このメソッドは、包含関係の近似値を計算します。このメソッドの戻り値が
true
であれば、指定された文字セットは確実に現在の文字セットに含まれています。ただし、戻り値がfalse
の場合でも、指定された文字セットが現在の文字セットに含まれていることがあります。- パラメータ:
cs
- 指定された文字セット- 戻り値:
- 指定された文字セットがこの文字セットに含まれる場合
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
- エンコードされるcharバッファ- 戻り値:
- エンコードされた文字を格納するbyteバッファ
-
encode
public final ByteBuffer encode(String str)文字列をこの文字セットで表現されたバイトにエンコードする簡易メソッドです。このメソッドを文字セット
cs
に対して呼び出すと、次の式と同じ結果が返されますcs.encode(CharBuffer.wrap(s));
- パラメータ:
str
- エンコードされる文字列- 戻り値:
- エンコードされた文字を格納するbyteバッファ
-
compareTo
public final int compareTo(Charset that)この文字セットと別の文字セットを比較します。文字セットは正規名順に並べられます(アルファベットの大文字と小文字は区別されない)。
- 定義:
compareTo
、インタフェース:Comparable<Charset>
- パラメータ:
that
- この文字セットと比較する文字セット- 戻り値:
- この文字セットが指定された文字セットより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数
-
hashCode
public final int hashCode()この文字セットのハッシュ・コードを計算します。- オーバーライド:
hashCode
、クラス:Object
- 戻り値:
- 整数値で表されるハッシュ・コード
- 関連項目:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
equals
public final boolean equals(Object ob)このオブジェクトが別のオブジェクトと等価であるかどうかを判断します。2つの文字セットは、同じ正規名を持っている場合に限り等価です。 文字セットがほかの型のオブジェクトと等価になることはありません。
- オーバーライド:
equals
、クラス:Object
- パラメータ:
ob
- 比較対象の参照オブジェクト。- 戻り値:
- この文字セットが指定のオブジェクトと等価である場合に限り
true
- 関連項目:
Object.hashCode()
、HashMap
-
toString
public final String toString()この文字セットを説明する文字列を返します。
-