如何读取Java中具有特定字符编码的文件?

我试图根据此方法的输出以UTF-8或Windows-1252格式读取文件:

public Charset getCorrectCharsetToApply() {

// Returns a Charset for either UTF-8 or Windows-1252.

}

到目前为止,我有:

String fileName = getFileNameToReadFromUserInput();

InputStream is = new ByteArrayInputStream(fileName.getBytes());

InputStreamReader isr = new InputStreamReader(is, getCorrectCharsetToApply());

BufferedReader buffReader = new BufferedReader(isr);

我遇到的问题是将BufferedReader实例转换为FileReader

此外:

  • 文件本身的名称(fileName)不能被认为是特定的Charset; 有时文件名将包含UTF-8字符,有时还包含Windows-1252。文件的内容也是如此(但是,如果文件名和文件内容 始终 具有匹配的字符集)。
  • 只有内部的逻辑getCorrectCharsetToApply()可以选择要应用的字符集,因此 调用此方法 之前 尝试按文件名读取文件的结果非常好,Java尝试使用错误的编码读取文件名…导致文件死亡!

提前致谢!

回答:

因此,首先要注意的是,一定要意识到,fileName.getBytes()有了文件名,就得到文件名的字节,而不是文件本身。

其次,阅读FileReader的文档:

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在FileInputStream上构造一个InputStreamReader。

因此,听起来好像FileReader实际上不是要走的路。如果我们采纳文档中的建议,那么您应该将代码更改为:

String fileName = getFileNameToReadFromUserInput();

FileInputStream is = new FileInputStream(fileName);

InputStreamReader isr = new InputStreamReader(is, getCorrectCharsetToApply());

BufferedReader buffReader = new BufferedReader(isr);

而不是尝试制作FileReader。

以上是 如何读取Java中具有特定字符编码的文件? 的全部内容, 来源链接: utcz.com/qa/404520.html

回到顶部