IAm*_*aja 20 java file-io utf-8 character-encoding windows-1252
我试图以UTF-8或Windows-1252的形式读取文件,具体取决于此方法的输出:
public Charset getCorrectCharsetToApply() {
// Returns a Charset for either UTF-8 or Windows-1252.
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有:
String fileName = getFileNameToReadFromUserInput();
InputStream is = new ByteArrayInputStream(fileName.getBytes());
InputStreamReader isr = new InputStreamReader(is, getCorrectCharsetToApply());
BufferedReader buffReader = new BufferedReader(isr);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是将BufferedReader实例转换为FileReader.
此外:
fileName)不能被信任为特定的Charset; 有时文件名将包含UTF-8字符,有时还包含Windows-1252.文件的内容也是如此(但是,如果文件名和文件内容始终具有匹配的字符集).getCorrectCharsetToApply()可以选择要应用的字符集,因此在调用此方法之前尝试通过其名称读取文件很可能会导致Java尝试使用错误的编码读取文件名...这导致它死亡!提前致谢!
Den*_*eng 30
所以,首先,作为一个抬头,确实意识到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);
Run Code Online (Sandbox Code Playgroud)
而不是试图制作FileReader.
使用 Java 7+,您可以在一行中创建 Reader:
BufferedReader buffReader = Files.newBufferedReader(Paths.get(fileName), getCorrectCharsetToApply());
| 归档时间: |
|
| 查看次数: |
41943 次 |
| 最近记录: |