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中有汉字,但输出为乱码,字符输出正常,为什么? 展开
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中有汉字,但输出为乱码,字符输出正常,为什么? 展开
5个回答
展开全部
出现问题的原因是字节流中每个汉字是两个字节,所以肯定会出现乱码的,要将字节流通过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流会一直存在,直到程序运行结束。
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流会一直存在,直到程序运行结束。
展开全部
首先确认你的字符编码,gbk编码中文是2个字节,utf编码是3个字节代表一个字符
read读到的是一个节,一个中文,当然就读半个字节了,不完全当然是乱码了
read读到的是一个节,一个中文,当然就读半个字节了,不完全当然是乱码了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
txt 的字符是gb2312的 控制台 喷出的字符一般要经过转码 转成utf-8 就行了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先请看我修改后的源代码:
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编码组合表示的字符而已。
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编码组合表示的字符而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
热一天我也吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询