机器学习和生物信息学实验室联盟

标题: java读取文本文件中文乱码解决 [打印本页]

作者: zouquan    时间: 2012-1-12 16:46
标题: java读取文本文件中文乱码解决
java读取文本文件一般使用类似下面的方法

BufferedReader bin = new BufferedReader(new FileReader("D:/test.txt"));
String s = null;
while((s=bin.readLine())!=null){
        System.out.println(s);
}
bin.close();
但是有时我们读取的中文居然是乱码,其实原因也很简单,就是文本文件编码的问题,gbk gb2312 utf-8等等
我们怎么根据编码读取文本文件呢?
java中的public InputStreamReader(InputStream in, Charset cs)带有字符编码,你可以使用这个类使用指定编码读取文本文件

改为如下测试一下是否还是乱码?

BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream("D://test.txt"), "gbk"));
String s = null;
while((s=bin.readLine())!=null){
        System.out.println(s);
}
bin.close();
如果还是乱码,你只需根据对应的文本文件修改对应的字符编码就可以,中文编码一般utf-8和gbk就差不多了,同样文本文件的写出也可以使用OutputStreamWriter指定编码

作者: hsc    时间: 2012-1-12 17:59
我一般都是用UTF-8,看着正规一些,呵呵
作者: chenwq    时间: 2012-1-13 10:28
GBK编码是GB2312编码的超集,向下完全兼容GB2312,
同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。
同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。
GBK还收录了GB2312不包含的汉字部首符号、竖排标点符号等字符。

一次在MySQL中存储的文本带有空格,Java环境中使用了GB2312编码,读出了乱码。使用空格的ASCII码32去转义也没转换过来。后来发现GBK支持编码范围更大,编码换成GBK,就可以了。





欢迎光临 机器学习和生物信息学实验室联盟 (http://123.57.240.48/) Powered by Discuz! X3.2