7

を介して文字セットとしてUTF-16を指定できCharset.forName("UTF-16")、を介して新しいUTF-16デコーダーを作成できることがCharset.forName("UTF-16").newDecoder()わかりますが、CharsetDecoderonInputStreamReaderのコンストラクターを指定する機能しかありません。

Javaでストリームを読み取るときにUTF-16を使用するように指定するにはどうすればよいですか?

4

1 に答える 1

11

入力ストリームは生のバイトを処理します。入力ストリームから直接読み取る場合、取得するのは文字セットが無関係な生のバイトだけです。

生のバイトを文字に解釈するには、定義上、ある種の変換が必要です。生のバイトから読み取り可能な文字列に変換するにはどうすればよいですか?その「翻訳」は文字セットの形で提供されます。

この「追加された」レイヤーは、リーダーによって実装されます。したがって、ストリームから(バイトではなく)文字を読み取るにはReader、ストリームの上に(ニーズに応じて)ある種のを構築する必要があります。例えば:

InputStream is = ...;
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16"));

これによりreader.read()、指定した文字セットを使用して文字が読み取られます。行全体を読みたい場合は、BufferedReader上で使用してください。

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16")));
String line = reader.readLine();
于 2013-02-26T20:04:58.820 に答える