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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5929|回复: 2
打印 上一主题 下一主题

java读取文本文件中文乱码解决

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-12 16:46:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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指定编码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2012-1-12 17:59:37 | 只看该作者
我一般都是用UTF-8,看着正规一些,呵呵
回复 支持 反对

使用道具 举报

板凳
发表于 2012-1-13 10:28:12 | 只看该作者
GBK编码是GB2312编码的超集,向下完全兼容GB2312,
同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。
同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。
GBK还收录了GB2312不包含的汉字部首符号、竖排标点符号等字符。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 09:13 , Processed in 0.067692 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表