java - 如何读取保存编码的文件?

标签 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");

但我事先不知道我的文件将采用什么编码。

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

最佳答案

二进制文件(字节)实际上是这些字节的某种编码中的文本,不幸的是,它们没有将编码(字符集)存储在某处。

有时某处存在编码: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/

相关文章:

java - 不允许在主方法中声明

java - 对单表的日期、整数和字符串数据类型字段执行多列搜索?

PHP自编码算法

c++ - 某些文件 I/O C++ 库函数的 Delphi 替代品?

java - IS NOT NULL 总是返回真 JPA 查询

perl - 如何在 perl cgi-bin 脚本中使用 utf-8?

javascript - 在隐藏元素中编码 JSON

Java while 循环跳过用户输入的第一次迭代

java - 就性能而言, `java.net` 和 `java.nio` 的替代方案是什么?

java - 如何在 Android 中将数据从一项 Activity 传输到另一项 Activity ?