09_MYBATIS_DAY02

字符编码

计算机能够直接识别并处理的只有二进制数,这是由计算机的电子元器件的特性所导致的!

在二进制数中,每个0或每个1所占据的存储空间是1个二进制位(bit),由于1个二进制能够表达的信息含义只有2种,所以,1个二进制位不足以表达大量有意义的信息,通常使用字节(byte)来表示,每1个字节占8个二进制位,它是计算机中最基础的存储单位。

为了表示人类生活中使用到的字符(字母、数字、标点符号),早期就设计出了ASCII码表,它就记录了字符与二进制数的对应关系,例如110 0001就对应a110 0010对应b……

由于ASCII码表记录都是1个字节能够表示的字符,除去最高位的符号位,只有7个二进制位,只能表示128种不同的意义,就无法表示中文!所以,就出现了其它的编码,例如GBK、GB2312等,当然,ASCII码表也不适用于其它不使用英语的国家和民族,例如日本、韩国等,也创建了对应的编码。

由于越来越多的国家和民族都普及了计算机,设计出来的编码的种类太多,为了统一支持统一使用,就出现了Unicode编码,这是一种全球化编码,记录了全世界各国家和民族所使用的各种字符!

使用Unicode编码时,大多情况下使用2个字节来描述1个字符,假设可以使用1010 0011 1010 0101可以表示“汉”(只是假设而已),可以使用1011 1111 0000 1010表示“字”,当需要将“汉字”这2个字符在网络传输,可能在网络上出现的二进制数据就是1010 0011 1010 0101 1011 1111 0000 1010 ,但是,当接收方接收到这个二进制的序列时,就无法明确:这到底是2个汉字,还是4个英文,甚至是1汉字2英文,或2英文1汉字,或1英文1汉字1英文……

为了保障传输过程不会出现以上假设的问题,就产生了UTF系列的编码!

UTF = Unicode Transformation Format,Unicode传输编码。

以UTF-8为例,当需要传输2个字节才可以表示的1个字符时,会将二进制序列中的特定位置作为标记,并不用于表示编码的含义,凡是2个字节的数据,其格式都是:

110 xxxxx	10 xxxxxx

以上第1个字节的110中包括了2个1,就表示“从当前字节开始,一共有2个字节来描述同1个字符”!

当需要传输3个字节才可以表示的1个字符时,其格式是:

1110 xxxx	10 xxxxxx	10 xxxxxx

甚至还可以使用4个字节表示1个字符,其格式是:

11110 xxx	10 xxxxxx	10 xxxxxx	10 xxxxxx

在UTF-8编码规则中,如果使用2个字节来表示1个字符,实际可用的编码位只有11个二进制位,只能表示2048种不同的意义,所以,使用UTF-8编码表示中文时,需要使用3个字节(3个字节可用的编码位有16位,可以表示65536种不同的意义)!

由于UTF-8编码使用3个字节就可以表示常规使用的所有字符,一般够用,也有一些罕见的字符并没有收录进来,所以就产生了“使用4个字节表示1个字符”的做法,由于非常罕见,一般并不需要使用,所以,UTF-8编码又被区分为utf8mb3和utf8mb4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值