记录一下,关于编码的学习
C++中的utf8和unicode转化看这里: UTF8和Unicode转换
最早只有ASCII编码(以127个 字符组成的编码),后来需要支持中文,有 了GB2312(以大头的方式存储)
GB2312:
小于127的字符保留,称为半角字符
两个大于127的字符连在一起就表示汉字。前一个高字节从0xA1~0XF7+后一个低字节从0xA1~0xFE,组合出7000多个汉字
同时 又用两个字符重新编码了原先小于127的字符,这个部分被称为全角字符
GBK:
在GB2312的基础上改进,只要是高字节大于127的,就固定标示这个是一个汉字的开始--》这里增加了2W左右的汉字,包括繁体和符号
GB18030:
加入了少数民族的字
BIG5:
繁体中文,台湾地区用的就是
ANSI,又叫DBCS(double byte characterset 双字节字符集)包括 gb2312,GBK,GB18030,特点是双字节长的汉字字符和一字节的英文字符并存在一套编码方案里||即一个汉字算两个英文字符
后来国际组织制定,统一了这个编码
出现了Unicode(universal Multiple_Octet coded characterSet, 简称UCS)
用两个字节,16位来统一表示所有的字符
Ascii中的半角字符,只是由8位扩展为16位,其他则全部重新编码,由于半角只用低8位,其高八位永远是0,所以在保存英文文本的时候,会多浪费一倍空间。
用strlen会发现,一个汉字不再是两个字符,而是一个。至此,一个字符就是两个字节,一个汉字算两个英文字符发时代就过去了。
UTF-8:只是unicode 的实现方式之一
UTF(UCS Transfer Fromat) 是面向传输的编码,utf8每次8个位传输数据,utf16,每次16个位
网络数据传输时,会存在高低位的问题,一些计算机采用高位先发送,而我们PC的intel框架,用的低位先发。
为了便于认知,在文本流的开始,向对方发送一个标识符,文本开头有FEFF表示后面的数据,是高位先发,FFFE则表示低位。(二进制打开一个utf-*格式的文件,开头一定有这俩其中一个)
在数据库中,有“n”这个前缀的字串类型,就是unicode。