在工作中总会不经意间遇到乱码问题,这个时候我通常都会去找文档改编码类型,或者相同的文件更换软件打开,计算机编码方式这方面的内容也在用到中学习然后又忘记,然后又遇到查资料后来又忘记。。。。如此反复,那今天就汇总一下,在遇到就直接来这里找吧。
我们存储在计算机中的数据,计算机在处理和存储过程中都是用0和1表示,而我们常用的数字、字母、文字,存储在计算机中都是0和1,所以这个时候就需要用不同数量的0和1的组合用来表示我们人能够识别的各类字符。计算机的存储单位是位,一个位只能表示一个0或1,我们通常用8位为一个字节。
编码的种类有ASCII编码、GB2312、GBK、GB18030、 UNICODE、 UTF-8 等等
01 ASCII编码
百度百科里是这么讲的“在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像A、B、C、D这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 。”
ASCII编码就是用1个字节来存储字符,计算机最初是美国人发明的,他们的符号不多,所以还将8个0和1序列中的第一位固定为0,ASCII只能表示127个字符。
02 GB2312 /GBK/GB18030
GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施,是中国国家标准的简体中文字符集。它是用双字节表示的,两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。“高位字节”使用了0XA1-0XF7(把01-87区的区号加上0XA0),“低位字节”使用了0XA1-0XFE(把01-94加上0XA0)。这种编码方式支持7000多个汉字,它所收录的汉字已经覆盖中国大陆99.75%的使用频率,基本可以满足汉字计算机的需要。
由于GB2312只能表示7000多个汉字,无法满足我大中华的所有汉字,所以在此基础上我们有对其扩展出了GBK,GBK可以支持到2万多的汉字(包括繁体字)和符号,后来又扩展于是有了GB18030 ,可以支持少数民族的文字及符号。
全世界有上百种语言,每个国家都制定了自己的编码字符集,统称为MBCS,全称:MUILTI-BYTES CHARECTER SET,多字节字符集。由于每个国家制定了自己的编码规则字符集,各个国家语言都互不通用,所以国际标准化组织ISO推出了下面的万国码。
03 UNICODE / UTF-8
UNICODE(统一码、万国码、单一码)UNICODE通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,把高字节全部填为0。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。UNICODE 编码共有三种具体实现,分别为UTF-8,UTF-16,UTF-32,其中UTF-8占用一到四个字节,UTF-16占用二或四个字节,UTF-32占用四个字节。
UNICODE编码解决了编码不能通用的问题,但是却容易浪费内存,尤其是在存储英文的时候,例如一个字符“A”,ASCII编码只需要1个字节就够,但是UNICODE编码必须要用2个字节。为了解决这一问题,就有了UTF-8编码。UTF-8编码把存储英文依旧用一个字节,汉字就3个字节。特别是生僻的编程4-6字节,如果传输大量英文,UTF-8作用就很明显了。
所以在出现乱码问题时:文件是用什么编码方式进行编码的,解码的时候就选择同样的解码方式。