所以,我有 ISO8859-1
编码的文件。我做下一步:
InputStreamReader isr = new InputStreamReader(new FileInputStream(fileLocation));
System.out.println(isr.getEncoding());
我得到UTF8
...看起来FileInputStream
或InputStreamReader
将其转换为UTF8
。
是的,我知道下一种方法:
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileLocation), "ISO-8859-1");
但我事先不知道我的文件将采用什么编码。
如何读取保存编码的文件?
最佳答案
二进制文件(字节)实际上是这些字节的某种编码中的文本,不幸的是,它们没有将编码(字符集)存储在某处。
有时某处存在编码:Unicode 文本在文件开头可能有一个可选的 BOM 字符。 HTML和XML可以指定字符集。
如果您从互联网下载文件,则标题行中可能会提到字符集。假设它是一个 HTML 文件,并且 Content-Type: text/html; charset=Windows-1251
。然后您可以使用 Windows-1251 读取该文件,并始终将其存储为 UTF-8,修改/添加 <meta charset="UTF-8">
.
但通常没有解决方案来确定某些文件的编码。你可以这样做:
- 读取字节
- 如果可以在多字节序列中无错误地转换为 UTF-8,则它是 UTF-8
- 否则它是单字节编码,默认为 Windows-1252(而不是 ISO-8859-1)
- 也许可以将某些语言的词频表与编码结合使用,然后尝试一下
- 将确定的编码中的字节以 UTF-8 格式写入文件
可能有一个图书馆在做这样的事情;结合语言识别和字符集识别。
关于java - 如何读取保存编码的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52200703/