web-dev-qa-db-ja.com

javaを使用してutf-8エンコーディングでテキストファイルを読み取る

NetBeans 7.2.1プラットフォームでJavaを使用しているutf-8エンコーディングのテキストファイルの読み取りに問題があります

UTF-8 javaproject ==>右クリック==> properties ==> source ==> UTF-8を処理するためにJavaプロジェクトを既に構成しました

ただし、未知の文字出力は取得されます:������������������

コード:

File fileDirs = new File("C:\\file.txt");

BufferedReader in = new BufferedReader(
new InputStreamReader(new FileInputStream(fileDirs), "UTF-8"));

String str;

while ((str = in.readLine()) != null) {
    System.out.println(str);
}

他のアイデアはありますか?

ありがとう

25
Abrial

つかいます

    import Java.io.BufferedReader;
    import Java.io.File;
    import Java.io.FileInputStream;
    import Java.io.IOException;
    import Java.io.InputStreamReader;
    import Java.io.UnsupportedEncodingException;     
    public class test {
    public static void main(String[] args){

    try {
        File fileDir = new File("PATH_TO_FILE");

        BufferedReader in = new BufferedReader(
           new InputStreamReader(new FileInputStream(fileDir), "UTF-8"));

        String str;

        while ((str = in.readLine()) != null) {
            System.out.println(str);
        }

                in.close();
        } 
        catch (UnsupportedEncodingException e) 
        {
            System.out.println(e.getMessage());
        } 
        catch (IOException e) 
        {
            System.out.println(e.getMessage());
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

UTF-8を引用符で囲む必要があります

34
Shobhit Sharma

ファイルを正しく読んでいますが、問題はSystem.outのデフォルトエンコーディングにあるようです。これを試してUTF-8文字列を印刷してください-

PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(str);
10
MoveFast

Charsetパラメーターを使用して、InputStreamReaderのエンコードを指定する必要があります。

Charset inputCharset = Charset.forName("ISO-8859-1");
InputStreamReader isr = new InputStreamReader(fis, inputCharset));

これは私の仕事です。私はあなたを助けることを望みます。

8
jinkal

特殊文字が��としてマークするのを見つけるたびに、同じ問題に遭遇しました。これを解決するために、エンコードを使用してみました:ISO-8859-1

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1"));

while ((line = br.readLine()) != null) {

}

これがこの投稿を見た人の助けになることを願っています。

3

[OK]を、私は間違いなくパーティーに遅れていますが、まだ最適なソリューションを探しているなら、私は次を使用します(Java 8)

    Charset inputCharset = Charset.forName("ISO-8859-1");
    Path pathToFile = ....
    try (BufferedReader br = Files.newBufferedReader( pathToFile, inputCharset )) {
        ...
     }
0
7dr3am7