JAVA基础——字符编码

                           字符编码   

一、概述
InputStreamReader
OutputStreamWriter
字符转换流是字符流与字节流转换的桥梁,同时加入了编码转换

二、编码表的由来
计算机只能识别二进制数据,早期由来是电信号;
为了方便应用计算机,识别各个国家的文字;
就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表。
三、常见的编码表

这里写图片描述

注意:
1、Java语言char类型使用的是Unicode
2、UTF-8每一个字节的开头都加有标识头,加完后很容易区分。UTF-8中汉字用3个字节表示。
3、中文码表兼容ASCII码表(中文中有拼音)。

四、转换流的编码应用
1、可以将字符以指定编码格式存储。
2、可以对文本数据指定编码格式来解决。
3、指定编码的动作由构造函数完成,构造方法如下:

InputStreamReader(InputStream in, String charsetName) 
          创建使用指定字符集的 InputStreamReader
OutputStreamWriter(OutputStream out, String charsetName) 
          创建使用指定字符集的 OutputStreamWriter

五、编码与解码
1、定义
编码:String→byte[] —-> byte[] getBytes(Charset)
解码: byte[]→String—->String(byte[],charsetName)
String(byte[], int offset, int length,charsetName)
2.图解
这里写图片描述

注意:

1)如果编码编错了,就无法再解码了。
2)之所以可以再解码是因为ISO8859-1不识别中文,解码的时候保持了数据的原样性。如果开始使用UTF-8解码,由于UTF-8支持中文,解码之后数据就发生了变化,不再是原有数据。
3)Tomcat服务器默认编码就是ISO8859-1,当Tomcat服务器出现乱码时,可以再解码还原数据。
4)用记事本打开文件是解码,因为电脑中的数据都是二进制文件。

3.“联通”现象:在记事本中存入联通,再次打开出现乱码

现象解释:
UTF-8有自己的标识头,如下:
这里写图片描述

这里写图片描述
联通的二进制数:
**110**00001
**10**101010
11001101
10101000

刚好“联通”的二进制代码刚好满足UTF-8的标示,再次打开记事本时,其就按UTF-8解码所以造成乱码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值