FileInputStream,FileOutputStream在控制台中文显示乱码,如何解决?

erikchang 2008-02-14 11:33:00
从一个文档读出文字再写入另一个文档,在控制台显示中文时是乱码,但写出文件是正确的,怎样修改呢?
/*
* 从一个txt文档读取文字再写入另一个文档
*/
import java.io.*;

public class inout {
public static void main(String args[]) {
try{
int b;
//byte []a = new byte[100];
FileInputStream in = new FileInputStream("g:\\yufa.txt");
FileOutputStream ou = new FileOutputStream("g:\\out.txt");
while((b=in.read())!=-1){
System.out.print((char)b);
ou.write(b);
//String sh = new String();
}
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
...全文
5761 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
0302无名指 2012-05-12
  • 打赏
  • 举报
回复
我也刚也出现这样的问题,但参照10楼的方法后就可以了:
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(this.inFilename),"GB2312"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(this.outFilename),"GB2312"));
String data = null;
while ((data = br.readLine()) != null) {
System.out.println(data);
bw.write(data);
bw.newLine();
}
br.close();
bw.close();
这样Consol和输出文件都正常输出,日文的:
/**案件番号 */
String anKenNumber ;
/**案件枝番号 */
String anKenEdaNumber;
/**案件区分 */
Boolean anKenKubun;
/**ロン */
int loan;
yb2618 2011-06-08
  • 打赏
  • 举报
回复
遇到了同样的问题
hc360_hqg 2011-05-18
  • 打赏
  • 举报
回复
公布一下结果啊,楼主
「已注销」 2011-04-22
  • 打赏
  • 举报
回复
用InputStreamReader(InputStream in, String charsetName) 包装即可
coder_99 2011-04-21
  • 打赏
  • 举报
回复
4楼的方法挺好的,尝试以后没有中文乱码了。
老程序员 2010-01-08
  • 打赏
  • 举报
回复
有封装好的,就用封装的。
一行一行的读。
牛叔 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 maodie007 的回复:]
对于字符文件
想都不要想
请使用 FileReader 和 FileWriter

[/Quote]
同意
maodie007 2010-01-08
  • 打赏
  • 举报
回复
对于字符文件
想都不要想
请使用 FileReader 和 FileWriter
wenjjing2lianee 2010-01-08
  • 打赏
  • 举报
回复
呵呵,学习
不白吃饭 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liang8305 的回复:]
你的程序哪一行是显示中文的?
System.out.print((char)b); 这行?

这个变量b是b=in.read(),in.read()的返回值是int型,读取的字节数量,不是读取的内容
[/Quote]

这句话不对的,,,b不是读取的字节数量,而是读入的字节, int 4个字节, 只在低8位存,高24忽略

int data;
while((data=System.in.read())!=-1)
System.out.println(data);
//输入a 输出97 ; 输入“我”输出 206 210

如果用System.out.write(data); //这时输入什么打印什么 输入“我”打印我

这里pirnt方法和 write方法的区别,,一个是打印整数,一个是把字节写入输出流。
erikchang 2008-02-20
  • 打赏
  • 举报
回复
非常感谢各位大虾的帮忙啊~
wdchengxuyuanzm 2008-02-19
  • 打赏
  • 举报
回复
try{
int b;
FileInputStream in = new FileInputStream("e:\\a.txt");
FileOutputStream ou = new FileOutputStream("e:\\b.txt");
InputStreamReader reader = new InputStreamReader(in,"gbk");
OutputStreamWriter writer = new OutputStreamWriter(ou,"gbk");
while((b=reader.read())!=-1){
System.out.print((char)b);
writer.write(b);
}
writer.flush();
}catch(IOException e){
System.out.println(e.getMessage());
}
yibunengjing 2008-02-19
  • 打赏
  • 举报
回复
try {
String b;
FileInputStream in = new FileInputStream("d:\\abc.txt");
FileOutputStream ou = new FileOutputStream("d:\\out.txt");
PrintStream p=new PrintStream(ou);
BufferedReader sb = new BufferedReader(new FileReader(new File("d:\\abc.txt")));
while ((b = sb.readLine()) != null) {
System.out.println(b);
b += "\n";
ou.write(b.getBytes());
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
经过测试,控制台和写入文件都正常
liang8305 2008-02-19
  • 打赏
  • 举报
回复
你的程序哪一行是显示中文的?
System.out.print((char)b); 这行?

这个变量b是b=in.read(),in.read()的返回值是int型,读取的字节数量,不是读取的内容
smartzxy 2008-02-17
  • 打赏
  • 举报
回复
我也碰到过类似的问题,后来看了《java核心技术》,改用了FileReader/FileWriter流就好了~我是新手,回答只参考~
gzbao9999 2008-02-17
  • 打赏
  • 举报
回复
以 我 这个汉字为例
我的16进制unicode编码为6211
转换为2进制是 0110 0010 0001 0001
转换为10进制为2^14+2^13+2^9+2^4+2^0=1+16+512+8192+16384=25105
System.out.print(char(25105));
打印出来刚好就是 我

修改下一楼的程序,读入一个只有 我 一个字的.txt文件
while((b=in.read())!=-1){
//在这儿加一行
System.out.print(b+" ");
System.out.println((char)b);
ou.write(b);
}
结果会出现两个200+的数字;因为汉字是两个字节,而程序每次取了一个字节,
我想这个两个数据的二进制形式,一定和0110 0010 0001 0001 存在这一种对应关系
我观察了一下 但是没有找到具体的转换生成方式。 留给诸位继续奋斗。
nk_smallbee 2008-02-15
  • 打赏
  • 举报
回复
出现这个问题有两个原因:
第一,你没有考虑到编码问题,你的程序读出来一个int,然后就转成char是不行的。可以考虑使用BufferedReader的readLine来读取字符串,然后再转换成合适的编码。

第二,就是和其它程序的乱码一个原因,所使用的非Unicode语言不是系统的默认非Unicode语言
不懂编程 2008-02-15
  • 打赏
  • 举报
回复
把区域设置改成中文的就正常了
不懂编程 2008-02-15
  • 打赏
  • 举报
回复
操作系统是中文吗?我的系统是英文的,汉字在控制台输出就是?,到文件中是正确的;我用的是eclipse
erikchang 2008-02-15
  • 打赏
  • 举报
回复
加了四楼的方法以后,控制台没有乱码,写入的txt文档全是乱码
加载更多回复(7)

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧