【问题标题】:Read Windows text file on Linux --- MIME issues?在 Linux 上读取 Windows 文本文件 --- MIME 问题?
【发布时间】:2014-01-03 16:19:04
【问题描述】:

我正在尝试通过在 Linux PC 上运行的 Java 应用程序逐行读取 MIME 类型为“appliaction/octet-stream”的文件。澄清:“appliaction/octet-stream”是在 Linux 上运行“file -ib file.txt”的结果。

我要读取的文件是在 Windows XP 上创建的。

我已将文件命名为“file.txt”。

在 linux 上,“cat file.txt”显示内容。 "cat -v" 和 vim 显示控制字符。

当我通过我的 Java 应用程序运行代码以迭代它时(使用简单的 BufferedReader(FileReader) 类型的代码),我的输出是意外的。

我应该采取任何措施吗?我尝试使用 dos2unix 转换文件,但无济于事。

EDIT:输入文件,通过vim或"cat -v"读取时如下:

[^@S^@y^@s^@t^@e^@m^@]^@^M^@ 

该行仅显示“系统”,但似乎控制字符使文件无法通过我的 Java 应用程序读取。

更新:我使用所有可用的字符编码运行我的代码,结果发现可读的字符集是“x-UTF-16LE-BOM”和“COMPOUND-TEXT”。感谢大家的帮助。

【问题讨论】:

  • 可能是行尾。 Linux/Unix 使用\n,Windows 使用\r\n。文件本身没有“mime 类型”。 mime 是一种包装在文件周围的东西,用于解释其中的数据类型。
  • 使用相同的编码来读写文件,应该可以正常工作...
  • 1) 详细说明“输出意外”,并详细说明文件包含的内容,也许还有一些代码... 2) 这与 MIME 有什么关系?
  • 这很可能是编码或换行问题。在 Windows 上,默认换行符是 \r\n,默认编码是 Latin 1。在大多数 Linux 系统上,默认换行符是 \n,默认编码是 UTF-8
  • 我应该澄清一下,出乎意料的输出是它读取的行都是空白的,但是输入文件的每一行都有文本。

标签: java file-io character-encoding


【解决方案1】:

看起来该文件是使用UTF-16 encoding 编写的。要在 Java 中阅读此内容,您只需 specify that encoding in your reader:

InputStreamReader reader = new InputStreamReader(
    new FileInputStream(filename), Charset.forName("UTF-16"));

【讨论】:

  • 我已经尝试了上述方法,这是我的结果:我的 InputStreamReader 不再识别换行符,因此它将整个文件视为一行。此外,我仍然无法使用新的新编码读取文件。
  • 另外,也许我不清楚上面的 MIME 类型。我的意思是,当我在 Linux 上运行“file -ib file.txt”时,结果是“appliaction/octet-stream”。
  • @cjtightpant 您是否正在尝试读取您使用dos2unix 转换的文件?不;这将损坏以这种方式编码的文件。
  • 查看我的最新更新。我使用您在上面发布的代码和x-UTF-16LE-BOM 作为字符集,并且文本是可读的。谢谢!
最近更新 更多