java中按字节读取中文出现乱码,为什么
try{FileInputStreamf=newFileInputStream("f:\\test\\test.txt");intbyteRead=f.read();wh...
try {
FileInputStream f = new FileInputStream("f:\\test\\test.txt");
int byteRead = f.read();
while (byteRead!=-1) {
System.out.print((char)byteRead);
byteRead = f.read();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileInputStream f = new FileInputStream("f:\\test\\aa.txt");
byte[] b=new byte[1024];
int byteRead = f.read(b);
while (byteRead!=-1) {
String x=new String(b,"GBK");
System.out.print(x);
byteRead = f.read(b);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这样写最后一小部分乱码,把1024改为不同的值,还会有不同的乱码 展开
FileInputStream f = new FileInputStream("f:\\test\\test.txt");
int byteRead = f.read();
while (byteRead!=-1) {
System.out.print((char)byteRead);
byteRead = f.read();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileInputStream f = new FileInputStream("f:\\test\\aa.txt");
byte[] b=new byte[1024];
int byteRead = f.read(b);
while (byteRead!=-1) {
String x=new String(b,"GBK");
System.out.print(x);
byteRead = f.read(b);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这样写最后一小部分乱码,把1024改为不同的值,还会有不同的乱码 展开
展开全部
你用这段试试:
try {
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\test.txt"));
String line = "";
String str = "" ;
while((line=br.readLine()) != null) {
str += line ;
}
System.out.print(str) ;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
----------------------------
读取中文一般都用FileReader类.
因为中文是占两个字符.用FileInputStream(只能读一个字符)无法读取.
用你上面的读取时,不管数组设为多大,它读文件时,是按字节读的,每读一个字节,就判断和编码表中的哪个字符对应,而中文是两个字符,永远对应不到,故一定会产生乱码!!!
try {
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\test.txt"));
String line = "";
String str = "" ;
while((line=br.readLine()) != null) {
str += line ;
}
System.out.print(str) ;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
----------------------------
读取中文一般都用FileReader类.
因为中文是占两个字符.用FileInputStream(只能读一个字符)无法读取.
用你上面的读取时,不管数组设为多大,它读文件时,是按字节读的,每读一个字节,就判断和编码表中的哪个字符对应,而中文是两个字符,永远对应不到,故一定会产生乱码!!!
展开全部
一个汉字两个字节....f.read();只是读出一个字节 当然有问题了..
try {
FileInputStream f = new FileInputStream("f:\\test\\aa.txt");
int size = f.available();
byte[] b=new byte[size];
f.read(b);
String readString = new String( b );
System.out.println( readString );
f.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileInputStream f = new FileInputStream("f:\\test\\aa.txt");
int size = f.available();
byte[] b=new byte[size];
f.read(b);
String readString = new String( b );
System.out.println( readString );
f.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文档类出现乱码应该是字符编码问题,试下换码咯.文本最好用unicode,读取中文字符用FileReader类.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只有全英文的可以用字节读写,其他语言都应该用字符流,不然就会乱码来的,因为其他语言都是用两个字节记录的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询