在编码、数据库操作、crt时,往往需要设置各种字符集,看了总是想不起来,这里简要记录下,有个大概。
ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,用一个字节表示一个字符,1byte = 8 bit,所以是2^8 = 256 个,但老美没有那么多字符咋办,就把第一位固定为0,于是ascii只支持127个字符,但这只适用于26个英文以及常用符号,别的非英语国家怎么办,于是有了unicode。
unicode是万国码,又称utf16,用两个字节表示一个字符, 2byte = 16bit,所以是2^16 = 65556个,好处是兼容性强,可以兼容 ascii utf8 gbk等字符集,但空间浪费大,原因是不论是哪种字符,都用2个字节表示。
utf8是一种基于unicode的动态编码方式,用1~4个字节表示字符,英文用一个字节表示,汉字用三个字节表示,utf-8编码进行存储时有极大地优势,但是当读取到计算机内存时却不大合适,因为utf-8编码是变长的,不方便寻址和索引,所以在计算机内存中,还是转化为Unicode编码合适些。这就可以解释为什么每次读取文本时,要将编码转化为Unicode编码,而将内存中的字符写入文件存储时,要将编码转化为utf-8了,但因为是动态的(编码+存储格式),所以编码或转换过程就会慢一些,但这些资源可忽略不计。
gbk是针对汉字的编码方式,由中国国家标准总局发布,其包含关系如下: gb18030>gbk>gb2312>ascii是在ascii之上的字符集,用两个字节来表示一个字符,之所以有这么多版本,那是因为国家发展了,用的字也多了。