java字节流对汉字输出为乱码的问题

packageIoOut;importjava.io.*;publicclassApp14_1{publicstaticvoidmain(Stringargs[])thr... package IoOut;
import java.io.*;
public class App14_1
{
public static void main(String args[]) throws IOException //read()方法抛出IOException异常,在此交给JVM处理
{
FileInputStream fr =new FileInputStream("c:\\aaa.txt"); //ok,但不能正 确读取出汉字
int ch;
int count=0;
ch=fr.read(); //read()方法返回的是一个整型数字
while(ch!=-1)
{
System.out.print((char)ch);
ch=fr.read();
count++;
}

fr.close();

System.out.println("\n共读取了:"+count+"个字符");
}
}
在aaa.txt中有汉字,但输出为乱码,字符输出正常,为什么?
展开
 我来答
198901245631
推荐于2017-09-05 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1735万
展开全部
出现问题的原因是字节流中每个汉字是两个字节,所以肯定会出现乱码的,要将字节流通过BufferedReader变成按行读取的就可以了。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
zgh26782000
推荐于2017-10-15 · TA获得超过1453个赞
知道小有建树答主
回答量:788
采纳率:0%
帮助的人:499万
展开全部
首先确认你的字符编码,gbk编码中文是2个字节,utf编码是3个字节代表一个字符
read读到的是一个节,一个中文,当然就读半个字节了,不完全当然是乱码了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cy461128709cy
2011-10-27 · 超过20用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:64.1万
展开全部
txt 的字符是gb2312的 控制台 喷出的字符一般要经过转码 转成utf-8 就行了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老冯文库
2011-10-27 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8734

向TA提问 私信TA
展开全部
先请看我修改后的源代码:

package IoOut;

import java.io.*;

public class App14_1
{
public static void main(String args[]) throws IOException //read()方法抛出IOException异常,在此交给JVM处理
{
FileInputStream fr =new FileInputStream("c:\\aaa.txt"); //ok,但不能正 确读取出汉字
int ch;
int count=0;
ch=fr.read(); //read()方法返回的是一个整型数字
while(ch!=-1)
{
System.out.write(ch);
ch=fr.read();
count++;
}

fr.close();
System.out.println("\n共读取了:"+count+"个字符");
}
}

其实只改了一处地方,
System.out.print((char)ch);
改为
System.out.write(ch);
前者是按字符格式写,后者是按字节格式写。汉字、图片、音频等应该按字节处理,否则会出现所谓的乱码。
实际上没有所谓的乱码,只是不同Unicode编码组合表示的字符而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1165899608
2011-10-28 · TA获得超过318个赞
知道答主
回答量:45
采纳率:0%
帮助的人:9.1万
展开全部
热一天我也吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式