{eval=Array;=+count(Array);}
GBK是微软为简体中文而制定的本地编码,在工信部被案。各个国家或地区都会制定并使用各自的本地编码,一些企业也会制定某个国家或地区的本地编码(GBK就是微软制定的简体中文编码)。一份用本地编码编写的文件在不指明所用的本地编码时被打开就可能看到乱码的现象。
为了解决本地编码的乱象,统一编码(UNICODE)和ISO这两个组织都着手制定能容纳各国文字而不冲突的文字编码系统,目前这两个组织相互承认,并且编码兼容。
目前很多计算机系统已使用2字节(16位整数)或4字节(32位整数)的统一编码,统一编码只说明每个字符的编码,但没有说明如何将编码存放入存储介质上。
由于目前计算机系统有高字节在前和低字节在前两种整数存放模式,因此采用高字节在前存放的数据在低字节在前的系统中就会出现异常,反之亦然。同时,我们知道许多编程系统在处理字符串时会将值为0的字节认为是字符串的结束,而无论是高字节在前还是低字节在前的字符串,都会在字符串中出现大量值为0的字节,这时传统的字符串处理函数就无法使用了。
为了解决统一编码如何存放的问题并兼容现有的字符串处理函数,就推出了UTF8编码,这个编码规定了统一编码的存放方式,并且保证依然使用值为0的字节作为字符串的结束符,这样就可以依然使用原有的字符串处理函数而不必新开发一套了。
当然UTF8也存在一个问题,这就是它是变长编码。一个统一编码的字符可能会编码为一个字节、二个字节、三个字节、四个字节(版本1)或六个字节(版本2)。
回答这个问题前先了解下什么叫字符集。
计算机里面只有高电平和低电平,用数字表达就是0101,二进制。二进制可以和八进制,十进制,十六进制转换。
那么计算机如何表述文字呢,英文,简体中文,繁体中文,日语,等文字呢?
各国都设计了不同的对应关系,将数字和文字对应起来。这就有了下面不同的字符集。
GB2312、GBK、GB18030 - 中文
BIG5 - 中文繁体
KS X 1001、EUC-KR、ISO-2022-KR - 韩文
JIS X 0208 - 日文
但以上每种字符集都只收录了本国的文字,需要显示不同国家的文字,还需要设置不同的字符集,很不方便。
这个时候UNICODE就出现了,统一了字符集,将各国的文字都编码进去了。
但完整在计算机里面表述Unicode需要4个自己,这个时候就有了各种不同的编码规则。
比如utf8,utf16,utf32之类的。其中utf8是最经济实惠的(空间占用最少)。
这样既实现了处理各国文字,有实现了不乱码,无需转码之类的。
window默认使用gbk,一个汉字占用2个字节的空间,gbk对中文和英语支持是可以,但别的很多语言的文字不能显示。Linux默认使用UTF-8,一个汉字占用3个字节的空间,UTF-8又称万国码,所有的语言的文字都能显示。
互联网上用的最多的是UTF-8,window平台下很多软件保存文本还是gbk格式的多。
utf8是国际标准,适合西方和亚洲文字,当然中文也没问题。国内销售的软件必须符合国标,所以必须符合gb18030标准,于是就只能gbk了,Windows本来是支持utf8的,为了符合中国国标只能gbk。
gbk和utf8可以互相转换,但还是无法100%保证不乱码。
gb18030,gbk,unicode是字符编码,是各个组织或者国家制定的针对字符(或者叫符号)的一种编码方式。utf8是传输编码,是为了解决unicode在英语世界存储或者传输过程中,带宽浪费的问题,两者不是同一类标准,不可以互相比较
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答