黑马程序员技术交流社区

标题: 文件输出控制台乱码的问题 [打印本页]

作者: 梁志仲    时间: 2012-8-25 12:52
标题: 文件输出控制台乱码的问题
import java.io.*;
public class Test
{
public static void main(String[] args)throws Exception
{
  FileInputStream fis = new FileInputStream("1.txt");
  FileOutputStream fos = new FileOutputStream("2.txt");
  byte[] b = new byte[5];
   int n;  
   while((n=fis.read(b))!=-1)
  {
    System.out.print(new String(b,0,n));   //为什么直接打印的中文是乱码
    fos.write(b,0,n); //写入文本文件的中文正常
  }
  fis.close();
  fos.close();
}
}

请高手详细分析下直接打印到控制台的中文是乱码,而写入文件中则正常。

作者: 唐志兵    时间: 2012-8-25 12:57
编码问题。。。
作者: 刘源    时间: 2012-8-25 13:32
本帖最后由 刘源 于 2012-8-25 13:59 编辑

System.out.print(new String(b,0,n));   //为什么直接打印的中文是乱码
fos.write(b,0,n); //写入文本文件的中文正常
先说说,为什么fos.write(b,0,n); 正常,因为write方法,虽然接收的是一个字节数组,但底层调用的还是一字节一个字节这么往里面写的,字节流必然操作的必然是字节。
System.out.print(new String(b,0,n));而他为什么不正常?你读一个长度为5的字节数组,然后将其转换为字符串打印,然后重复一遍,这2个字符串是单独的个体,没有练习的。所以就会出现,一个字符串包含半个中文字,那一个也包含半个,就成乱码了。
最后说说怎么改:
既然你的知道writer方法好用,那你只需要把输出地址变成:OutputStream os =System.out;不就行了吗。然后用os.writer(b,0,n)方法不就输出到控制台上了
作者: 唐见    时间: 2012-8-25 14:42
恩,我在做入学测试就遇到这个题,当时也是楼主这样,什么原因楼上说的正确。现在用手机,楼上解决办法行不行就不知道了。我当时是定义了一个字节流的缓冲区,先将读到的字节写入缓冲字节数组中,然后统一转成字符串打印到控制台就不会出乱码了
作者: 郗绿阳    时间: 2012-8-25 16:22
编码的问题 在后边加上"UFT-8"




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2