如何使用保存的编码读取文件?

时间:2018-09-06 09:17:22

标签: java encoding io

因此,我有ISO8859-1编码的文件。我下一个:

InputStreamReader isr = new InputStreamReader(new FileInputStream(fileLocation));
System.out.println(isr.getEncoding());

然后我得到UTF8 ...看起来像FileInputStreamInputStreamReader将其转换为UTF8

是的,我知道下一种方法:

BufferedReader br = new BufferedReader(
     new InputStreamReader(
     new FileInputStream(fileLocation), "ISO-8859-1");

但是我事先不知道文件将采用哪种编码方式。

如何使用保存的编码读取文件?

1 个答案:

答案 0 :(得分:2)

不幸的是,二进制文件(字节)实际上是某些字节编码的文本,但是没有将编码(字符集)存储在某个地方。

有时在某处有一种编码: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文件

可能有一个图书馆在做这样的事情;结合了语言识别和字符集识别。