【发布时间】:2017-06-27 00:27:47
【问题描述】:
我有一个包含中文字符的文件。我编写了一个 java 代码,它读取这个文件并使用 FileInputStream/FileOutputStream (Byte Stream) 写入另一个文件,它工作正常。但是当我使用字符流 FileReader/FileWriter 时,问题就来了。
现在的问题是,为什么只使用八位的字节流能够读取中文字符,因为我知道字节流一次读取/写入一个字节,而使用一个字节我们只能识别 ASCII 字符(即只有 128 个字符)。使用 16 位读/写并具有读/写汉字能力的字符流(FileReader/FileWriter)不能正确读/写文件。
【问题讨论】:
-
您应该向我们展示您的代码,但是请注意
FileInputStream并不关心您的文件存储什么,它会复制原始字节;当您打开已复制到您正在使用的工具(比方说记事本)的文件时,正在应用将这些字节转换为人类可读文本的编码。 -
@Eugene 好的。现在假设每个汉字在文件中存储为两个字节,字节流读取器/写入器一次读取一个字节并将其写入另一个文件,最后工具(记事本++)将其转换为人类可读的形式(即合并两个字节形成一个汉字)。但是字符流有什么问题,它也是一次读取和写入两个字节到文件,工具(notepad++)应该将它转换成人类可读的形式。
-
不一定是两个字节,可能更多;例如代理对。几乎可以肯定您的编码错误,请参阅此处以获取提示:stackoverflow.com/questions/13350676/…
标签: java file-io stream internationalization