エンコーディングの正規名は明確です。公式リストは次のとおりですjava.nio
。APIの正規名と、java.io
API およびjava.lang
APIの正規名があります。
1) しかし、歴史的なエンコーディング名のリストは何ですか?
OuputStreamWriter
のJavadocgetEncoding()
:
エンコーディングに歴史的な名前がある場合は、その名前が返されます。それ以外の場合は、エンコーディングの正規名が返されます。
このインスタンスがOutputStreamWriter(OutputStream, String)コンストラクターを使用して作成された場合、返される nameはエンコーディングで一意であるため、コンストラクターに渡される name とは異なる場合があります。
Charset
JavaDoc :
一部の文字セットには、以前のバージョンの Java プラットフォームとの互換性のために定義された歴史的な名前があります。文字セットの歴史的な名前は、正規名またはエイリアスのいずれかです。過去の名前は、InputStreamReader および OutputStreamWriter クラスの getEncoding() メソッドによって返されます。
2)エンコーディングの正規名の 公式リストでは、java.io
正規名には「UTF8」が使用され、「UTF-8」は新しいの正規名であると記載されていjava.nio
ます。
しかし、InputStreamReader/OutputStreamWriter は「UTF-8」引数を受け入れます!
try {
FileOutputStream stream1 = new FileOutputStream("d:\\file.txt");
OutputStreamWriter writer1 = new OutputStreamWriter(stream1, "UTF-8");
System.out.println(writer1.getEncoding());
writer1.close();
} catch (UnsupportedEncodingException e) {
System.out.println("wrong encoding detected"); // never triggered
}
「UTF-8」は問題なく認識されているようですが、UnsupportedEncodingException
起動しません!
PS私は、現在(SE8)はNIOスタイルを受け入れることができ、java.lang/java.ioスタイルは歴史的と呼ばれています。少なくとも InputStreamReader/OutputStreamWriter には当てはまります。
私の命題は正しいですか?