手持两把锟斤拷,口中疾呼烫烫烫

不熟悉编程语言的童鞋可能会说,标题什么鬼?

懂的童鞋大概会抱着看热闹的心态点开文章:难道公众号也乱码了?

没错,标题上让人感觉摸不到头脑的“锟斤拷”和“烫烫烫”都是常见的乱码问题。

有时还会出现“屯屯屯屯屯屯”

这些问题基本上源于字符集之间的转换时出的差错。

锟斤拷乱码:

源于GBK字符集和Unicode字符集之间的转换问题。Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。那么U+FFFD的UTF-8编码出来,恰好是 '\xef\xbf\xbd'。如果这个'\xef\xbf\xbd',重复多次,例如 '\xef\xbf\xbd\xef\xbf\xbd',然后放到GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

烫烫烫乱码:

在windows平台下,ms的编译器(也就是vc带的那个)在 Debug 模式下,会把未初始化的栈内存全部填成 0xcc,用字符串来看就是"烫烫烫烫烫烫烫",未初始化的堆内存全部填成0xcd,字符串看就是“屯屯屯屯屯屯屯屯”。也就是说出现了烫烫烫,赶紧检查初始化吧……

下面给大家介绍常见的字符编码

大家知道,计算机只认识0和1,那么如何让计算机理解我们文字呢?为了解决这个问题,人们就想如果将这些文字赋予特定的编号,然后将编号转化为二进制,计算机就能读懂这些符号,同时通过这些编号,计算机也能够将二进制转化为编号对应的字符再显示给人类去阅读,字符编码就诞生了,本文将为大家介绍常见的字符编码。

ASCII

如何让人类语言,比如英文被计算机理解?ASCII诞生,ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。其中:

0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符)。

32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。

65~90为26个大写英文字母。

97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

GB2312

虽然ASCII码能够解决英文问题,但是中国人也需要用计算机,这时ASII明显不能解决这个问题,于是中国国家标准总局在1980年发布《信息交换用汉字编码字符集》提出了GB2312编码,用于解决汉字处理的问题,1995年又颁布了《汉字编码扩展规范》(GBK)。GBK与GB 2312—1980国家标准所对应的内码标准兼容,同时在字汇一级支持ISO/IEC10646—1和GB 13000—1的全部中、日、韩(CJK)汉字,共计20902字。这样我们就解决了计算机处理汉字的问题了。

Unicode

全球有那么多的国家不仅有英文、中文还有阿拉伯语、西班牙语、日语、韩语等等。难不成每种语言都做一种编码?基于这种情况一种新的编码诞生了:Unicode。Unicode又被称为统一码、万国码;不管你使用的是英文或者中文,日语或者韩语,在Unicode编码中都有收录,且对应唯一的二进制编码。

UTF8

由于Unicode收录了更多的字符,它的解析效率也要大大降低。这时,就出现了一些中间格式的字符集,称为通用转换格式,即UTF(Unicode Transformation Format),最常用的就是UTF-8,我们不去研究UTF-8到底是如何提高效率的,你只需要知道他们之间的关系即可。

总结:

1.为了处理英文字符,产生了ASCII码。

2.为了处理中文字符,产生了GB2312。

3.为了处理各国字符,产生了Unicode。

4.为了提高Unicode存储和传输性能,产生了UTF-8

今天的小课堂就到这里啦

喜欢我们的话就点关注哦

兴趣驱动学习

让学习成为一种习惯

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615A1FFP600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券