/*
如何解决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);
觉得不错的就给我顶顶吧!!
|
|