Java FileReader编码问题

我尝试使用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 FileReader编码问题 的全部内容, 来源链接: utcz.com/qa/419605.html

回到顶部