1. ホーム
  2. java

[解決済み] Java FileReaderのエンコーディングの問題

2022-06-14 23:33:54

質問

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のエンコーディングはCP125であることがわかりました。しかし、java.io.FileReaderのJavaDocにはそのように書かれています。

このクラスのコンストラクタは デフォルトの文字エンコーディング とデフォルトのバイトバッファサイズが適切であると仮定します。 が適切であると仮定します。

FileReaderを使用する場合、自分で文字コードを設定する必要はないということでしょうか。しかし、現在間違ってエンコードされたデータを取得してしまったのですが、どのように対処するのが正しいのでしょうか?ありがとうございます。

どのように解決するのですか?

はい、あなたは エンコーディングを指定する必要があります。 を指定する必要があります。

はい、これはつまり 知る 読み込むファイルのエンコード方式を指定します。

いいえ、一般的な方法はありません。 推察 与えられたプレーンテキストファイルのエンコーディングを指定します。

の1引数コンストラクタです。 FileReader は、常にプラットフォームのデフォルトエンコーディングを使用します。 悪しき考え .

Java 11以降 FileReader は、エンコーディングを受け付けるコンストラクタも追加されました。 new FileReader(file, charset) new FileReader(fileName, charset) .

それ以前のバージョンのjavaでは new InputStreamReader( new FileInputStream(pathToFile) , <encoding>) .