读取非文本内容并将其写回文件

时间:2012-07-08 06:43:07

标签: java character-encoding

我需要从文件中读取行<row>⠁⠇⠕⠝⠛⠀⠺⠊⠞⠓⠀⠍⠁⠞⠓⠑⠍⠁⠞⠊⠉⠁⠇⠀⠉⠕⠝⠞⠑⠝⠞</row>然后回写。但是当我在文件中写回内容时

<row>�⠃⠕⠧⠑⠀⠙⠑�⠕⠞⠑⠀�⠀⠊�⠞⠑⠗⠛⠗�⠞⠊⠕�</row>
你能帮我解决一下吗?我需要在java中执行此操作

谢谢!

3 个答案:

答案 0 :(得分:2)

这显然是文本编码问题。问题可能发生在阅读或写作时,或者再次阅读所写内容时。您的输出看起来像是错误解释的little-endian UTF-16(除了看起来像纯ASCII的标记)。

BTW你的“非文字”评论只是误导 - 任何字符数据都是文本的,这些都是同义词。

答案 1 :(得分:0)

您需要使用二进制流而不是字符流。

换句话说,你这样做:http://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

应该这样做:http://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html

答案 2 :(得分:0)

编辑:现在我们已经有了<row>部分,看起来 毕竟是文本数据。但是,您没有向我们提供有关生成此文件的内容或<row>标记之间的数据的信息。 它是文本,还是二进制数据,不知怎的,你打算从阅读<row>的文本转到阅读二进制数据?你是怎么想知道<row>结束的地方?

您已了解数据的含义和格式 - 我们无法为您做到这一点。如果您可以解释其含义和格式,我们可以帮助您将其转换为代码......但如果没有这些信息,我们就无能为力。


你谈到阅读“行” - 然后你提供非文本数据。在二进制数据中没有“线”这样的概念。

如果您目前使用Reader某些说明(例如FileReader) - 。它们专为文本数据而设计。试图将二进制数据视为文本几乎可以保证丢失信息。

使用InputStream阅读,使用OutputStream进行编写,一切都应该正常(假设您正确使用它们 - 当然 - 特别是使用InputStream.read的返回值)。