Java基础-知识点总结-Java IO(五)字符编码

Java IO(五)-字符编码

【字符编码】

 

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

 

      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");

 

 

 

      编码表的由来:

 

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

 

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

 

      常见的编码表:

 

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

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

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

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

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

  6. 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解码,所以会出现乱码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值