黑马程序员技术交流社区
标题:
读取中文文件内容出现乱码问题
[打印本页]
作者:
行如止水
时间:
2013-8-29 18:18
标题:
读取中文文件内容出现乱码问题
本帖最后由 杨增坤 于 2013-9-5 20:29 编辑
这是我写的一个读文件的代码:
import java.io.*;
public class ReadFile {
public static void main(String[] args) throws Exception{
File file = new File("./exercise.txt");
InputStream input = new FileInputStream(file);
byte[] b = new byte[5];
while(input.read(b) != -1){
System.out.print(new String(b));
}
input.close();
}
}
复制代码
这个代码能读英文内容,但是读中文内容的时候就会出现乱码,求解释以及解决办法。
作者:
Thunder_-_Li
时间:
2013-8-29 18:48
兄弟 你好:
byte[] b = new byte[5]; 可能是这样啊 由于你的数组长度很短,造成的数据溢出,而你的中文又太多。你可以 更改一下 byte[] b = new byte[100]; 测试一下 。除此之外可能是 你的开发工具的问题 希望对你有帮助。。。
作者:
王靖远
时间:
2013-8-29 18:50
你的文件存和读要统一编码。把文件另存为改下编码试试。
作者:
328078121
时间:
2013-8-29 20:29
造成这种情况有两方面原因:最主要原因,数组太短,一个汉字可能有多个字节,一次读6个字节然后根据编码表转换成字符,可能出现整好到一个字哪里被断开然后就转换成了字符,容易出现乱码~~
还有一个原因是,文档的编码表不是你机子里的默认编码表~~
作者:
Nero
时间:
2013-8-29 20:43
第一 :不是 while(input.read(b) != -1){
而是
while((input.read(b))!=-1)(你判断条件都错了)
第二 能简写尽量简写
---InputStream is =new InputStream(new File(E:132.txt))
前提是在你能理解的情况下
作者:
Nero
时间:
2013-8-29 20:54
sorry 兄弟 是我错啦
你的判断条件是对的
你的错误在于
不该用字节流对象,得用字符流对象FileReader。因为你的内容是中文的。不知道你知不知道关于编码表的事,这可能和编码表有关,中文的默认编码表是jbk,而字节流对象可能用的是其他编码表, 对码混乱,导致乱码
个人意见,请前辈指正!!
作者:
★忙碌★
时间:
2013-8-29 22:07
建立缓冲区的大小一般是2的次幂,一般设为512,或者1024,代码没有问题,一楼说的很有道理,还有读取字符的话一般用FileReader,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2