A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 刘晓康 中级黑马   /  2012-4-4 23:00  /  1786 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么用io流复制文件的时候用 utf-8编码 目标文件没有出现乱码,而使用 gbk编码 就会出现乱码?gbk编码没有用武之处吗?

代码如下:
//目标文件没有出现乱码
BufferedReader br = null;
                 BufferedWriter bw = null;

                try {
                         br = new BufferedReader(new InputStreamReader(new FileInputStream(readStr),"utf-

8"));

                        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream

(writeStr),"utf-8"));

//目标文件出现乱码

BufferedReader br = null;
                 BufferedWriter bw = null;

                try {
                         br = new BufferedReader(new InputStreamReader(new FileInputStream(readStr),"gbk"));

                        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream

(writeStr),"gbk"));

4 个回复

倒序浏览

br = new BufferedReader(new InputStreamReader(new FileInputStream(readStr),"utf-

8"));

                        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream

(writeStr),"utf-8"));

当你这两个构造函数中的第二个参数 传utf-8的时候  写和读都是查找utf-8码表 的  
当你不传第二个参数 或者第二个参数为gbk 时  写和读的时候就查找gbk码表
这两个是成对使用,  你不能在文本文件中写的数据 是通过utf-8码表转换后的数据  而用gbk码表作为读取流的参数去读啊  这样读肯定会乱码的
    文本文件写进去的时候 使用什么码表转换的  就使用什么码表的流去操作  别混淆了就不会出现乱码了
回复 使用道具 举报
  你Myeclipse设置的编码,和你代码设置编码是否一致,如果你Myeclipse的是设置的ISO-8859-1,而你代码中式GBK,肯定会乱码,最好统一编码。右击项目名点击Peoperties在resource,有个other可以修改。然后是window-Preferences-Content Types-Text-java Source file里面可以修改
回复 使用道具 举报
  1. br = new BufferedReader(new InputStreamReader(new FileInputStream(readStr),"utf-8"));

复制代码
楼主第一次用UTF-8读取readStr没有出现乱码,那么只能说readStr文件本身就是用UTF-8来写的。
用GBK读取当然是乱码了。
用什么编码表写的,就的用什么编码表解析。
回复 使用道具 举报
一句话: 保持输入输出的一致性
对于程序,目标文件流是输入,输入的为utf-8码, 那么你程序对该流进行处理时,必须使用utf-8的编码来处理,否则无法识别该流,当然就乱码了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马