A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MulityRain 中级黑马   /  2015-4-24 10:43  /  1055 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

读中英文txt文档时,读出来的都是乱码,java用Unicode编码,但是还是不太明白中文英文都不能正确读出来这个问题,在加上byte数组时候可以正确读出,这是为什么?希望高手能清晰了解释一下,万分感谢
  1. package ioliu;

  2. import java.io.*;

  3. public class CopyOfTestInputStream {
  4.         public static void main(String[] args) throws Exception{
  5.        
  6.                 InputStream is = new FileInputStream("D:\\xunlei\\1.txt");//字节流

  7. /** 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
  8. 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:  BufferedReader in  = new BufferedReader(new InputStreamReader(System.in));
  9. */
  10.                
  11. /*                int ch;
  12.                 ch = is.read();//从输入流中读取数据的下一个字节。
  13.                 while(-1 != is.read())
  14.                 {
  15.                         System.out.printf("%c", ch);
  16.                         ch = is.read();
  17.                 }*/
  18.        
  19.                 //写成下面的方式可以避免乱码,但是byte大小设定成100,会读不完
  20. /*                byte[] b=new byte[1000];     //创建合适文件大小的字节数组   
  21.                
  22.         is.read(b);    //读取文件中的内容到b[]数组   
  23.         is.close();   
  24.        System.out.println(new String(b));   */
  25.                                
  26.         }
  27. }
  28. /*eclipse默认编码方式GBK,换成UTF-8也是乱码
  29. * 出现丢失,乱码的情况
  30. Nvrgv p
  31. Nvrls oe
  32. Awy aefih
  33. I losyut oe
  34. Tyn ie ilps,
  35. ste lasd.
  36. uthv aine
  37. Yu raswl oetu.
  38. opto  ml,
  39. o'llv hog orpi.
  40. nwi ilps,
  41. n teghyuwl an

  42. ???ú?
  43. ?????? ?
  44. ?????
  45. ??????×? ?
  46. ???±??????
  47. ???? ?
  48. ??????
  49. ?????? ?
  50. ?????
  51. ??×??? ?
  52. à?à?¨á???
  53. ?????? ?

  54. *????
  55. odfs odem ???????
  56. o fdem i ??????
  57. Lf saboe-igdbr úü?ó?ù??áò
  58. htcnnvrfy ?????è
  59. odfs odem ???????
  60. Frwe rasg ??????
  61. Lf sabre il úü?ó?¤??°?
  62. Foe nywt nw??±·??????
  63. */
复制代码



1.zip

720 Bytes, 下载次数: 76

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

10 个回复

倒序浏览
一个汉字是两个字节。你读取一个英文为一个字节自然不会出错。
读取汉字的时候只读取了一半,然后拿着读取的一半数据到码表上面找,一般情况是找不到的 反馈?是很正常的
回复 使用道具 举报
突然世界晴 发表于 2015-4-24 10:58
一个汉字是两个字节。你读取一个英文为一个字节自然不会出错。
读取汉字的时候只读取了一半,然后拿着读取 ...

英文也是乱码,也没有正确读出来是为什么呀
回复 使用道具 举报
英文不是读出来了吗?怎么乱码了

点评

读的不正确啊,看着是单词,其实都不是,第一句话是Neiver give up,没有正确显示出来  发表于 2015-4-24 12:03
回复 使用道具 举报
你把你的txt文件上传我试试。
回复 使用道具 举报
  1.   int ch;
  2. //这里读了一次,没打印
  3.                 ch = is.read();//从输入流中读取数据的下一个字节。
  4. //这里循环读取打印了
  5.                 while(-1 != is.read())
  6.                 {
  7.                         System.out.printf("%c", ch);
  8.                //这里读取没有打印
  9.                         ch = is.read();
  10.                 }*/
复制代码
回复 使用道具 举报
厉害啊,佩服
回复 使用道具 举报
突然世界晴 发表于 2015-4-24 12:10
你把你的txt文件上传我试试。

文件已经上传,谢谢啦
回复 使用道具 举报
其实你这问题是由于不规范的书写问题造成的,基本的读取输出书写得按步骤来
回复 使用道具 举报
System.out.printf("%c", ch);  这个不是C++里面的输出格式么?java也能用啊。。。没试过。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马