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改为不同的值,还会有不同的乱码
展开
 我来答
yeskeesky
2008-07-23 · TA获得超过302个赞
知道小有建树答主
回答量:74
采纳率:0%
帮助的人:0
展开全部
你用这段试试:

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(只能读一个字符)无法读取.

用你上面的读取时,不管数组设为多大,它读文件时,是按字节读的,每读一个字节,就判断和编码表中的哪个字符对应,而中文是两个字符,永远对应不到,故一定会产生乱码!!!
jiushixuefeng
2008-07-23 · TA获得超过558个赞
知道小有建树答主
回答量:766
采纳率:0%
帮助的人:0
展开全部
一个汉字两个字节....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();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友687b10409
2008-07-23
知道答主
回答量:33
采纳率:0%
帮助的人:0
展开全部
文档类出现乱码应该是字符编码问题,试下换码咯.文本最好用unicode,读取中文字符用FileReader类.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
loki0517243
2008-07-23 · 超过13用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
只有全英文的可以用字节读写,其他语言都应该用字符流,不然就会乱码来的,因为其他语言都是用两个字节记录的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式