您的位置:首页 > 职场人生

黑马程序员 知识点总结-Java IO(五)字符编码

2013-12-31 16:33 330 查看

----------------------Android培训Java培训、期待与您交流! ----------------------

【字符编码】

      字符流的出现为了方便操作字符。更重要是的加入了编码转换。通过子类转换流来完成。

      InputStreamReader和OutputStreamWriter在两个对象进行构造的时候可以加入字符集。

      转换流的编码应用:

             可以将字符以指定编码格式存储;可以对文本数据指定编码格式来解读

      例:

// 创建输出转换流对象,与文件相关联,以默认编码表GBK存储数据
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("gbk.txt"));
// 创建输出转换流对象,与文件相关联,以utf-8编码表存储数据
OutputStreamWriter osw1 = new OutputStreamWriter(
new FileOutputStream("utf.txt"), "utf-8");
// 创建输入转换流对象,与文件相关联,以默认编码表读取数据
InputStreamReader isr = new InputStreamReader(
new FileInputStream("gbk.txt"));
// 创建输入转换流对象,与文件相关联,以utf-8编码表读取数据
InputStreamReader isr1 = new InputStreamReader(
new FileInputStream("utf.txt"), "utf-8");


      编码表的由来:

             计算机只能识别二进制数据,为了方便应用计算机,让它可以识别各个国家的文字,

             就将各个国家的文字用数字来表示,并一一对应,形成一张表,就是编码表。

      常见的编码表:

ASCII:美国标准信息交换码。用一个字节的7位可以表示

ISO8859-1:拉丁码表,欧洲码表。用一个字节的8位表示

GB2312:中国的中文编码表。用两个字节16位表示

GBK:中国的中文编码表升级,融合了更多的中文文字符号

Unicode:国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode

UTF-8:最多用三个字节来表示一个字符。支持中文字符

字符编码

       编码:字符串à字符数组

                     Stringà getBytes();getBytes(StringCharSet);à
byte[]

                     在编码时,可以指定编码集,默认为GBK

       解码:字符数组à字符串

                     Byte[]ànew String();new String(String CharSet);àString

                     在解码时,可以指定编码集,默认为GBK

       例:

              Strings1 = "你好";

              Strings2 = "你好";

              //对字符串进行编码,默认为GBK

              byte[]b1 = s1.getBytes();

              //指定编码集为utf-8

              byte[]b2 = s2.getBytes("utf-8");

              System.out.println(Arrays.toString(b1));

              System.out.println(Arrays.toString(b2));

              //按指定编码集解码

              s1= new String(b1,"gbk");

              s2= new String(b2,"utf-8");

              System.out.println(s1);

              System.out.println(s2);

      注意:用什么编码集进行编码,必须用什么编码集进行解码,否则会出现乱码;当

              服务器出现乱码时,先用”iso8859-1”编码,然后再用”gbk”进行解码

记事本-联通:

      在记事本中只写入联通两个字,关闭后再打开会出现乱码

      对于utf-8编码表,每个字节都会有标识位:

对于一个字节表示一个字符,字节以0开头

对于两个字节表示一个字符,第一个字符以110开头,第二个字节以10开头

对于三个字节表示一个字符,第一个字符以1110开头,第二个和第三个字节

以10开头

             当联通以默认编码表存储到文本文件中时,是以四个字节存储的,这四个字节分别

             为1100000110101010 11001101 10101000,当文件用记事本打开时,会读取数据,

             读到第一个字节时,是以110开头,所以会判断第二个字节是否是以10开头,若

             是以10开头,则会用utf-8解码,否则会用默认编码表解码,而第二个字节是以

             10开头,所以记事本会用utf-8解码,所以会出现乱码

----------------------Android培训Java培训、期待与您交流! ----------------------


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息