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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 终结者 中级黑马   /  2013-11-21 23:48  /  1179 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. public class FileTest {
  3.         public static void main(String[] args) throws IOException {
  4.                 BufferedReader br=new BufferedReader(new  InputStreamReader(new FileInputStream("e:\\1.txt"),"gbk"));
  5.                 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\2.txt"),"utf-8"));
  6.                 String line=null;
  7.                 while((line=br.readLine())!=null){
  8.                         bw.write(line);
  9.                         bw.newLine();
  10.                 }
  11.                 br.close();
  12.                 bw.close();
  13.         }
  14. }
复制代码
今天在写博客的时候发现为什么我用的gbk和gb2312读取数据,用UTF-8写出数据的时候没出现乱码(按我想的应该会出现乱码啊)?如果反过来就出现乱码呢?即如下程序
  1. import java.io.*;
  2. public class FileTest {
  3. public static void main(String[] args) throws IOException {
  4. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("e:\\1.txt"),"utf-8"));
  5. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\2.txt"),"gbk"));
  6. String line=null;
  7. while((line=br.readLine())!=null){
  8. bw.write(line);
  9. bw.newLine();
  10. }
  11. br.close();
  12. bw.close();
  13. }
  14. }
复制代码

点评

FFF
一切都会有解决的。你就稍微等等好了!其实,也可以自己再研究研究的~说不定。自己就搞明白了~!哈哈~  发表于 2013-11-22 00:01

评分

参与人数 1技术分 +2 收起 理由
FFF + 2 活动额外技术分+1

查看全部评分

7 个回复

倒序浏览
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。

点评

FFF
没有解释问题。没有解决问题。只解释了名词!  发表于 2013-11-22 23:54

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 失望~~

查看全部评分

回复 使用道具 举报
che201311 发表于 2013-11-22 00:01
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节 ...

不是让你给我介绍编码缘由啊
回复 使用道具 举报
对啊 通俗点因为你输出流用的是UTF-8输入流用的是GBK UTF-8范围比GBK范围大 当读取时不再GBK的处理范围呢所以会出现乱码的情况
回复 使用道具 举报
che201311 发表于 2013-11-22 11:15
对啊 通俗点因为你输出流用的是UTF-8输入流用的是GBK UTF-8范围比GBK范围大 当读取时不再GBK的处理范围呢所 ...

根本就不知道你在讲什么啊,这跟范围大,范围小没啥关系啊,而是根据码表对应来查的啊
回复 使用道具 举报
都乱码呀!由于UTF-8汉字占三个字节,GBK汉字占两个字节,所以GBK转UTF-8能显示字,只是不匹配,反之UTF-8转GBK,就啥也找不到了。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 好吧,有解决的方法吗?

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马