java.io.FileReader を使用していくつかのテキスト ファイルを読み取って文字列に変換しようとしましたが、結果が誤ってエンコードされており、まったく読み取れないことがわかりました。
私の環境は次のとおりです:
Windows 2003、OS エンコーディング: CP1252
Java 5.0
私のファイルは UTF-8 または CP1252 でエンコードされており、その一部 (UTF-8 でエンコードされたファイル) には中国語 (非ラテン文字) の文字が含まれている可能性があります。
私は作業に次のコードを使用します。
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
上記のコードは動作しません。テキストが UTF-8 でエンコードされている場合でも、FileReader のエンコードは CP1252 であることがわかりました。しかし、java.io.FileReader の JavaDoc には次のように書かれています。
このクラスのコンストラクターは、デフォルトの文字エンコーディングとデフォルトのバイト バッファー サイズが適切であると想定しています。
これは、FileReader を使用している場合、自分で文字エンコードを設定する必要がないことを意味しますか? しかし、現在、間違ってエンコードされたデータを取得しています。この状況に対処する正しい方法は何ですか? ありがとうございます。
ベストアンサー1
そう、あなたエンコーディングを指定する必要があります読み取りたいファイルの。
はい、これはあなたがしなければならないことを意味します知る読み取りたいファイルのエンコーディング。
いいえ、一般的な方法はありません推測任意の「プレーンテキスト」ファイルのエンコード。
1引数コンストラクタFileReader
常にプラットフォームのデフォルトのエンコーディングを使用します。これは一般的に悪い考え。
Java 11 では、FileReader
エンコーディングを受け入れるコンストラクターも追加されました。new FileReader(file, charset)
そしてnew FileReader(fileName, charset)
。
以前のバージョンのJavaでは、new InputStreamReader(
new FileInputStream(pathToFile)
, <encoding>)
。