我有一个文本文件,中文单词写在一行。该行被"\r\n"
包围,并使用fileOutputStream.write(string.getBytes())
编写。
我读英文单词没有问题,我的缓冲读者用readLine()
完美地解析它。但是,它将中文句子识别为多行,从而搞砸了我的程序流程。
任何解决方案?
答案 0 :(得分:3)
使用string.getBytes()
使用平台默认编码对String
进行编码。这很少是您想要的,特别是当您尝试编写非当前语言环境的字符时。
改为指定编码(例如,使用string.getBytes("UTF-8")
)。
更清洁,更像Java的方式是将OutputStream
包裹在这样的OutputStreamWriter
中:
Writer w = new OutputStreamWriter(out, "UTF-8");
然后,您只需致电writer.write(string)
,每次要编写String
时都不需要重复编码。
并且,如下所述,在阅读文件时指定相同的编码(最好使用Reader
)。
答案 1 :(得分:2)
如果您通过fileOutputStream.write(string.getBytes())
输出文字,则输出的是平台的默认编码。确保您使用适当的编码并使用可识别编码的方法进行读取非常重要。问题不在您的BufferedReader
实例中,而是在其下面的Reader
将字节转换为字符。