14

本当に簡単な質問です。Java プログラムで Unicode テキスト ファイルを読み取る必要があります。

私は明らかに機能していない BufferedReader FileReader コンボでプレーンASCIIテキストを使用することに慣れています:(

Buffered Reader を使用して「従来の」方法で文字列を読み取り、次のような方法で変換できることを知っています。

temp = new String(temp.getBytes(), "UTF-16");

しかし、リーダーを「コンバーター」にラップする方法はありますか?

編集: ファイルは FF FE で始まります

4

7 に答える 7

18

Reader をラップするのではなく、InputStreamReader を使用してストリームをラップします。次に、現在使用している BufferedReader でそれをラップできます

BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding));
于 2009-06-11T08:27:45.763 に答える
10

https://docs.oracle.com/javase/1.5.0/docs/api/java/io/InputStreamReader.htmlを確認してください。

ソースファイルを次のように読み取ります。

Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8"));
于 2009-06-11T08:23:57.160 に答える
7

いくつかのメモ:

  • 「UTF-16」エンコーディングは、 BOMでマークされたリトルエンディアンまたはビッグエンディアンでエンコードされたファイルを読み取ることができます。Java 6 エンコーディングのリストについては、こちらを参照してください。「UTF-16」を使用して書き込むときに使用されるエンディアンが明示的に述べられていません-ビッグエンディアンのようです-そのため、データを保存するときに「UnicodeLittle」を使用することをお勧めします
  • String クラスのエンコード/デコード メソッドを使用する場合は注意が必要です。特に、UTF-16 のようなマーク付きの可変幅エンコーディングを使用する場合は注意してください。データ全体に対してのみ使用してください。
  • 他の人が言ったように、多くの場合、InputStreamInputStreamReaderでラップして文字データを読み取るのが最善です。StringBuilderまたは同様のバッファを使用して、入力を単一の String に連結できます。
于 2009-06-11T09:06:54.500 に答える