Java FileReader 编码问题

标签 java file unicode encoding

我尝试使用java.io.FileReader读取一些文本文件并将它们转换为字符串,但我发现结果编码错误并且根本不可读。

这是我的环境:

  • Windows 2003,操作系统编码: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();
    }

上面的代码不起作用。我发现 FileReader 的编码是 CP1252,即使文本是 UTF-8 编码的。但是 java.io.FileReader 的 JavaDoc 说:

The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate.

这是否意味着如果我使用FileReader,我不需要自己设置字符编码?但我目前确实得到了错误编码的数据,处理我的情况的正确方法是什么?谢谢。

最佳答案

是的,您需要指定要读取的文件的编码

是的,这意味着您必须知道要读取的文件的编码。

不,没有通用的方法来猜测任何给定“纯文本”文件的编码。

The one-arguments constructors of FileReader 始终使用平台默认编码,这通常是一个坏主意。

自 Java 11 FileReader还获得了接受编码的构造函数: new FileReader(file, charset) new FileReader(fileName, charset) .

在早期版本的java中,您需要使用 new InputStreamReader( new FileInputStream(pathToFile) , <encoding>) .

关于Java FileReader 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60382024/

相关文章:

python - 如何将 "\u5c0f\u738b\u5b50\u003a\u6c49\u6cd5\u82f1\u5bf9\u7167"之类的字符串转换为汉字

sql-server - 如何使用希伯来语传递 SQL 存储过程 NVARCHAR 参数?

java - LG 设备上的 Android 6.0 (Marshmallow) 中的 new String(byte[]) 损坏?

java - 如果我从 synchronized block 返回,什么时候释放锁?

java - 为什么我无法停止 Android 中的服务?

java - 更新文本文件定界符java

c - 使用文件系统的最佳方式?

android - 在 Android 中下载文件

java - 如何加快 Android 中的 SQLite 数据库插入速度?

java - java中的变量转义序列