当前位置: 首页 > 面试题库 >

Java FileReader编码问题

壤驷穆冉
2023-03-14
问题内容

我尝试使用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说:

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。

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


问题答案:

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

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

不,没有一般的方法可以猜测任何给定“纯文本”文件的编码。

的构造函数FileReader始终使用平台默认编码,这通常是个坏主意。

你需要使用而不是FileReader 。new InputStreamReader(new FileInputStream(pathToFile), <encoding>)



 类似资料:
  • 最近,我们正在将java构建作业从serverA迁移到serverB,java源代码(包含中文字符)在使用Ant的原始serverA上编译良好( ),但是,当我们将相同的代码签出到新的serverB并运行相同的Ant脚本时,出现了编码错误,如“用于编码GBK的Unmappable character”(Unmappable character for encoding GBK)。(JDK版本相同)

  • 我有一个(非常简单的)java Spring Boot/REST服务,它从输入中呈现PDF并使用IntelliJ对其进行测试。 我使用pdfbox作为创建此类pdf的工具。 一个特点是,除了它想要的常规内容外,客户端还可以将附件作为字节[]提供。 当用户尝试该服务时,最终文档只有附件部分的空白页。 使用IntelliJ和HTTP REST客户端进行了尝试,但遇到了相同的问题 当我注意到使用post

  • 当从其中一个web服务获取数据时,引号(“)将显示为(?)当我使用Rest模板时。我在chrome上的postman中测试了web服务,并给出了正确的字符。我尝试编码UTF-8,但没有成功。 我检查了以下是从Web服务提供商编码: 高速缓存控制→私有连接→关闭内容编码→gzip内容长度→3407内容类型→text/xml; charset=ISO-8859-1日期→周三,2015 13:35:53

  • 我在gradle运行junit测试时遇到了一个问题。从stacktrace来看,这似乎是一个编码问题。 我已将编码设置为 谢谢

  • 我正在尝试通过golang使用JSON API,但是在获得响应时遇到了可怕的时间。我正在使用示例 JSON 终结点 http://jsonplaceholder.typicode.com/posts/1,该终结点返回 这是我的代码,来自这个堆栈溢出答案: 这是输出: 我知道endpoint有效。这是编码问题还是其他问题?我在Mac OSX 10.11.15上。 谢谢

  • 我有这样一个csv文件 我在读书