黑马程序员技术交流社区

标题: 读取中文文件内容出现乱码问题 [打印本页]

作者: 行如止水    时间: 2013-8-29 18:18
标题: 读取中文文件内容出现乱码问题
本帖最后由 杨增坤 于 2013-9-5 20:29 编辑

这是我写的一个读文件的代码:
  1. import java.io.*;
  2. public class ReadFile {

  3.         public static void main(String[] args) throws Exception{
  4.                 File file = new File("./exercise.txt");
  5.                 InputStream input = new FileInputStream(file);
  6.                 byte[] b = new byte[5];
  7.                 while(input.read(b) != -1){
  8.                         System.out.print(new String(b));
  9.                 }
  10.                 input.close();
  11.         }
  12. }
复制代码
这个代码能读英文内容,但是读中文内容的时候就会出现乱码,求解释以及解决办法。

作者: 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