如何读取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