Java中的Readline()无法正确处理中文字符

时间:2011-02-11 09:44:48

标签: java android character-encoding

我有一个文本文件,中文单词写在一行。该行被"\r\n"包围,并使用fileOutputStream.write(string.getBytes())编写。

我读英文单词没有问题,我的缓冲读者用readLine()完美地解析它。但是,它将中文句子识别为多行,从而搞砸了我的程序流程。

任何解决方案?

2 个答案:

答案 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将字节转换为字符。

本文可能有用:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)