因为乱码这个问题经常会遇到,所以突然就对编码这个问题产生了兴趣,查看了一些资料,现进行整理下,免得以后忘记
为啥会产生乱码 :
首先因为计算机只能识别0,1这样的数字,并且在存储的时候计算机也只能存储这样的二进制的数字.所以为了让计算机能识别我们的语言文字就制定了编码集来进行一一对应. 然后美国国家标准协会 ANSI 就制定了一个标准,即美国信息交换标准代码(ASCII),后来我们国家为了让能计算机识别中文,制定了GB2312 对汉字进行了编码集的制定,后续的GBK就是该编码集的扩展,但是如果同时出现日文,英文,中文又怎么办,于是就有了Unicode 字符集,涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码.所以当使用的编码是一套规则,解码又用的另一套规则的时候就会出现乱码的问题,,因为每一套的编码集设定的与计算机对应码表是迥异的.但为啥英文基本不会出现乱码呢,是因为后续所制定的GBK也好,Unicode也好都兼容了ASCII.
解决乱码问题:
当你编码和解码做到统一的时候就不会在出现乱码问题了.
顺便有去看了下十进制和二进制之间的转换计算(居然忘了,记录下,只整理了正整数的):
十进制转换成二进制:
如图:求41的二进制数
用41去除以二,余数提出来,直到除的数为0或者1时为止,在把所除的余数按顺序进行倒序,如果得到的数少于八位,则进行前位补0
则41的二进制位00101001;
二进制转换成十进制:
求00101001的十进制数:
从最右位开始取数,右边第一位为1,然后去乘以2的0次方,第二位乘以2的1次方,依次类推,然后把所得的数相加及为二进制所得数
00101001=2^5+2^3+2^0 = 32+8+1=41