web-dev-qa-db-ja.com

java)を使用してUnicodeテキストファイルを読み取ります

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

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

バッファリーダーを使用して「従来の」方法で文字列を読み取り、次のようなものを使用して変換できることを知っています。

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

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

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

11
Ron Tuffin

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

BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding));
15
objects

チェック http://Java.Sun.com/j2se/1.4.2/docs/api/Java/io/InputStreamReader.html

私は次のようなものでソースファイルを読みます:

Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8"));
8
Macarse

いくつかの注意:

  • 「UTF-16」エンコーディングは、 [〜#〜] bom [〜#〜] でマークされたリトルエンディアンまたはビッグエンディアンのエンコーディングファイルを読み取ることができます。 Java 6エンコーディングのリストについては、 ここ を参照してください。「UTF-16」を使用して書き込むときに使用されるエンディアンは明示されていません-大きいようです-エンディアン-データを保存するときに「UnicodeLittle」を使用することをお勧めします
  • 文字列クラスのエンコード/デコードメソッドを使用する場合、特にUTF-16のようなマークされた可変幅エンコーディングを使用する場合は注意してください データ全体でのみ使用してください
  • 他の人が言っているように、InputStreamInputStreamReader でラップして文字データを読み取るのが最善の場合がよくあります。 StringBuilder または同様のバッファを使用して、 入力を連結 を単一の文字列に変換できます。
7
McDowell

Google Data APIのUnicodeReaderを使用することをお勧めします。同様の質問については、 この回答 を参照してください。バイトオーダーマーク(BOM)からエンコーディングを自動的に検出します。

また、Apache Commons IOの BOMInputStream を検討することもできます。これは基本的に同じですが、BOMのすべての代替バージョンを網羅しているわけではありません。

1
stenix

InputStreamReaderの作成に「UTF-8」を追加するだけで、すぐに特殊文字が表示されました。

InputStreamReader istreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(istreamReader);
0
Jorge Ros