31

我在使用 utf-8 编码读取文本文件时遇到问题我正在使用带有 netbeans 7.2.1 平台的 java

我已经配置了java项目来处理UTF-8 javaproject==>右键==>properties==>source==>UTF-8

但仍然得到未知字符输出:���� �������� ���� �</p>

编码:

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);
}

还有其他想法吗?

谢谢

4

5 回答 5

42

利用

    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 放在引号中

于 2013-02-17T06:29:23.513 回答
11

您需要使用Charset参数指定InputStreamReader的编码。

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

这对我来说是工作。我希望能帮助你。

于 2015-08-29T18:47:32.357 回答
10

您正在正确读取文件,但问题似乎出在System.out. 试试这个来打印UTF-8字符串-

PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(str);
于 2013-02-17T05:17:43.603 回答
4

好的,我肯定迟到了,但如果您仍在寻找最佳解决方案,我会使用以下(对于 Java 8)

    Charset inputCharset = Charset.forName("ISO-8859-1");
    Path pathToFile = ....
    try (BufferedReader br = Files.newBufferedReader( pathToFile, inputCharset )) {
        ...
     }
于 2018-11-14T11:49:29.563 回答
4

每次发现特殊字符将其标记为��时,我都会遇到同样的问题。为了解决这个问题,我尝试使用编码:ISO-8859-1

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

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

}

我希望这可以帮助任何看到这篇文章的人。

于 2018-03-02T14:39:23.480 回答