字符串编码
上午搞点轻松的东西
1 字符编码
概念解释:
编码的概念:按照何种规则将字符存储在计算机中(⽐如'a'这个字符⽤什么表⽰:121或者88)称为编码
解码的概念:将编码好的字符解析成其原本要表⽰的字符(⽐如将121解析成'a')
字符集的概念:系统所⽀持的所有抽象字符的集合,包括各个国家的⽂字标点图形符号数字
字符编码:通俗来说就是编码过程所使⽤的规则(可以理解为加密的秘钥或者对应关系)。是⼀套法则,使⽤该法则可以对某⼀套⾃然语⾔(不限类别,可以是任意想要表达的东西)与其他东西的⼀个特定集合进⾏配对。参照战争中的电报密码可以理解。官⽅点说法为:字符编码是定义在字符集上的映射规则
对字符编码是信息处理的基本技术之⼀,⼈类使⽤符号表达信息,但计算机只能根据元器件的不同状
态的组合进⾏存储信息(0-1状态),元器件不同的状态的组合能代表数字,所以字符编码就是把⼈类的符号转换成计算机可以接受的数字系统的数字(称为数字代码),即所有的(⾯向计算机的)字符编码的最终⽬的都是将⼈类的语⾔转换成 0-1 组合
字符集和字符编码的关系:字符集=字库表+编码字符集+字符编码
字库表:“所有可读或者可显⽰字符的数据库(怎么理解⾃⼰看着办,反正不是很重要),字库决定了整个字符集能展现的所有字符的范围“
编码字符集:简称字符集。就是编码好的字符的集合
字节:最早使⽤ 8bit 作为⼀个字节(1byte),⼀个字节最多能表⽰的整数是255(11111111),两个字节最多能表⽰的整数是65535(11111111 11111111),还可以有更多字节以此类推
常见的编码和字符集(字符集):
ASCII:》》》既是编码,⼜是字符集《《《⽼美发明出来的,⼀个字节,最早只有127个字符被编码,⼤⼩写英⽂字母,数字跟⼀些符号
GB2312 :》》》既是编码,⼜是字符集《《《中⽂,两个字节,不兼容⼩于127的英⽂字符,完全不占⽤0-127(【129-255】【129-255】)
GBK 编码:完美兼容GB2312+ASCII,两个字节,当⾸位⼩于127时判定为英⽂字符,第⼆位不判定(ASCII⼀位编码),⾸位⼤于127时判定中⽂,读取第⼆位。共收录汉字21003个,符号883个,提供1894个造字位
ANSI(本地字符集):与本机语⾔设置有关,中⽂机的ANSI就是GBK,⽇⽂机的ANSI就是jis。就是因为这个东西跨国交流时⽂本编码通常会造成很⼤的⿇烦
Unicode 字符集(统⼀码,万国码):解决国际化问题,全世界通⽤码表。容量 2^32(40亿+)(4个字节),常⽤的字符通常在前65535个⾥,与ASCII不兼容(通常来说字符只⽤到了最低两位,所以简单表⽰的时候可以将⾼位的0⽆视掉,PS:传输时可能更快,因为节省了三个字节)
注意:Unicode只是⼀个字符集,并不是具体的编码格式,只是负责分配编号(可以理解为⼯作就是将其他编码已经编好的完成字符进⾏再处理⽐如给⼤家都在⾼位补0凑够4个字节?)
本质上讲,Unicode字符集是⽤来统⼀编码,防⽌解码后出现乱码导致沟通出现问题,出发点是好的,但是如果⽂本基本全都是英⽂的情况下使⽤Unicode字符集会⽐AscII字符集多占⽤⼀倍的空间(参照字节长度),传输和存储上显然不划算,因此出现了UTF-8以及UTF-16编码。
UTF-8编码:专门⽤来简化Unicode,不是定长的哦,定长就没有意义了,因为Unicode是个4字节的字
符集,不定哪个字符多长,⽽要做到简化就必须取最简,就不能规定长度。UTF-8把⼀个Unicode字符根据不同的数字⼤⼩编码成1-6个字节,常⽤的英⽂字母被编码成1个字节,汉字通常是3个字节,个别极其⽣僻的字符被编码成4-6个字节。
(每)⼀个字节的前1-3个bit 是描述部分,后⾯的是实际序号部分:
--⼀个字节的第⼀位为0,表⽰当前字符为单字节字符,占⽤⼀个字节空间,0之后的7个bit代表在Unicode中的编码序号
--⼀个字节以110开头,代表当前字符为双字节字符,占⽤两个字节空间,110之后的5个bit加上后⼀个字节的除10外的6个bit 代表Unicode中的序号,且第⼆个字节⼀定以10开头
--⼀个字节以1110开头,代表当前字符为三字节字符,占⽤三个字节的空间,110之后的5个bit加上后两个字节除10外的6+6个bit 代表Unicode中的序号,且第⼆第三个字节⼀定以10开头乱码符号怎么打出来
--⼀个字节以10开头,代表当前字节为多字节字符的第⼆个字符,10之后的6个bit 和之前的⼀部分代表Unicode中的序号
3个字节的UTF-8⼗六进制编码⼀定是以E开头的
2个字节的UTF-8⼗六进制编码⼀定是以C或D开头的
1个字节的UTF-8⼗六进制编码⼀定是以⽐8⼩的数字开头的
附上字符集和编码对应关系
⼩结:计算机内存中统⼀使⽤Unicode编码,当需要保存到硬盘或者需要传输的时候就转换成UTF-8编码。使⽤⽂本编辑⼯具打开时会将UTF-8字符转换成Unicode字符写⼊内存,保存时再转换⼀下,总之确保内存中的字符⼀定是Unicode字符集中的字符,硬盘中的字符⼀定是占空间少的字符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论