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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
如何解决FileInputStream单个字节读取汉字时出现的乱码?
下面以解决<<黑马程序员-04-I/O技术>>中单个读取字节文件中汉字乱码的问题为例。
*/
class Test
{
        public static void main(String args[])
        {
                /*
                解决的思路主要来源于以下两串数字,由于在FileInputStream单个字节读取的时候出现了乱码,
                而多个读取时并未发现乱码,于是我就打印出了<<黑马程序员->>中IntPut1()方法里面的num变量的
                数据和IntPut2()方法中的by[]数组里面的数据进行了对比,然后尝试将num的变量进行转换,结果
                将int类型转换成byte类型之后他们的值果然是一样的,所以可以利用一个byte类型的数组将他们存放
                在一起,然后转换成String类。分析与测试过程如下:
                */
                //186,218,194,237,179,204,208,242,212,177
                //-70,-38,-62,-19,-77,-52,-48,-14,-44,-79
                byte b[] = {-70,-38,-62,-19,-77,-52,-48,-14,-44,-79};
               
                String s = new String(b);                                                                                        //打印出"黑马程序员"
               
               
                byte b1[] = {(byte)186,(byte)218,(byte)194,(byte)237,(byte)179,(byte)204,(byte)208,(byte)242,(byte)212,(byte)177};
               
                String s1 = new String(b);
               
                System.out.print(s1);                                                                                                                //打印出"黑马程序员"
                /*
                        由于在FileInputStream单个字节读取的时候需要用到循环,所以我们可以利用一个for循环把每次读到的数据先存放到
                        一个byte数组里面,然后通过String的构造函数把它转变成汉字最后再输出,这样就能成功的解决了单个读取字节时出现的乱码了。
                */
        }
}
例如:
                                                        FileInputStream fis = null;                                                                                                               
                                               
                                                        fis = new FileInputStream("Demo.txt");
                                               
                                                        int num = 0;
                                                       
                                                        byte b[] = new [fis.available()];
                                                        for(int i=0;(num=fis.read()) != -1;i++)                                                                                               
                                                         {
                                                                 b = (byte)num;                                                                                               
                                                         }                                                                       
                                                                 String str = new String(b);                                                                                                                       
                                                                System.out.print(str);

觉得不错的就给我顶顶吧!!
       

1 个回复

倒序浏览
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马