黑马程序员技术交流社区

标题: 字符编码问题 [打印本页]

作者: 终结者    时间: 2013-11-21 23:48
标题: 字符编码问题
  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. }
复制代码

作者: che201311    时间: 2013-11-22 00:01
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大。
作者: 终结者    时间: 2013-11-22 00:19
che201311 发表于 2013-11-22 00:01
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节 ...

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

根本就不知道你在讲什么啊,这跟范围大,范围小没啥关系啊,而是根据码表对应来查的啊
作者: 低调的奢华    时间: 2013-11-22 19:57
都乱码呀!由于UTF-8汉字占三个字节,GBK汉字占两个字节,所以GBK转UTF-8能显示字,只是不匹配,反之UTF-8转GBK,就啥也找不到了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2