锟斤拷锟(什么是锟斤拷?)
锟斤拷锟(什么是"锟斤拷"?)
周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话。
图片来自 Pexels
过了一会,女朋友回来了,她拿出手机,给我看了她在超市拍的照片:
要想知道什么是乱码,需要先从计算机编码说起。
字符编码和 ASCII
我们经常看一些谍战剧,谍战剧里敌特、地下党员以及八路军各部间发送情报的时候,一般都是通过电报发送的。
电报在传递的过程中,需要发报员用电键发出长短不一的电码,收报员就会听到电报机发出的滴滴滴答答答的声音。
其实电报发出的声音都是"滴"和"答"的组合,"答"的声音是"滴"的三倍长。
发报员要先通过一种方式,将想要发送的情报转成电报的滴答声,收报员在听到滴答声之后,再将它们翻译成正常的文字。这个过程就是字符编码和字符解码。
谍战剧中将情报转成电报的"滴"和"答"声主要通过摩尔斯电码,这是一种通过不同的排列顺序来表达不同的英文字母、数字和标点符号的字符编码方式。
莫尔斯电码由短的和长的电脉冲(称为点和划)所组成。点和划的时间长度都有规定,以一点为一个基本单位,一划等于三个点的长度。正好对应上电报的"滴"和"答"。
就像电报只能发出"滴"和"答"声一样,计算机只认识 0 和 1 两种字符,但是,人类的文字是多种多样的,如何把人类的文字转换成计算机认识的 01 字符呢,这个过程同样需要通过字符编码。
字符编码(Character encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。
和摩尔斯电码功能类似,上个世纪 60 年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,这被称为 ASCII 码,一直沿用至今。
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套计算机编码系统。
它主要用于显示现代英语,其中共有 128 个字符,包含了所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符等。
由于 ASCII 只有 128 个字符,虽然对于英文字符都可以表示了,但是世界上还有很多其他的文字他是没办法表示的,所以需要一种更加全面的字符编码。
在介绍其他的字符编码之前,我们先来说一下一个计算机领域通用的字符集。
Unicode
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。
它对世界上大部分的文字系统进行了整理、编码,使得计算机可以用更为简单的方式来呈现和处理文字。
Unicode 至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为 2019 年 5 月公布的 12.1,这一版本只新增了 1 个字符,即日本新年号令和的合字。
Unicode 备受认可,并广泛地应用于计算机软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java 编程语言以及现代的操作系统,都采用 Unicode 编码。
Unicode 是一套通用的字符集,包含世界上的大部分文字,也就是说,Unicode 是可以表示中文的。
UTF-8,UTF-16,UTF-32
Unicode 虽然统一了全世界字符的编码,但没有规定如何存储。这么做是有考虑的:如果 Unicode 统一规定,每个符号就要用 3 个或 4 个字节表示,因为字符太多,只能用这么多字节才能表示完全。
一旦这么规定,那么每个英文字母前都必然有 2 到 3 个字节是 0,因为所有英文字母在 ASCII 中都有,都可以用 1 个字节表示,剩余字节位置就要补充 0。
如果这样,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。
为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即 UTF(Unicode Transformation Format)。
常见的 UTF 格式有:
UTF-7
UTF-7.5
UTF-8
UTF-16
UTF-32
UTF-8:使用 1 至 4 个字节为每个字符编码,UTF-16:使用 2 或 4 个字节为每个字符编码,UTF-32:使用 4 个字节为每个字符编码。
所以我们可以说,UTF-8、UTF-16 等都是 Unicode 的一种实现方式。
举个例子,Unicode 规定了 1 个中文字符 "我"对应的 Unicode 是 "\u6211",但是,在 UTF-8 和 UTF-16 等不同的实现方式下,这个二进制 Code 的存储方式是不一样的。
UTF-8 使用可变长度字节来储存 Unicode 字符,例如 ASCII 字母继续使用 1 字节储存,重音文字、希腊字母或西里尔字母等使用 2 字节来储存,而常用的汉字就要使用 3 字节。辅助平面字符则使用 4 字节。
GBK,GB2312,GB18030
因为 UTF-8 是 Unicode 的一种实现,所以他包含了世界上的所有文字的编码,他采用的是 1-4 字节进行编码。
对于那些排在前面优先纳入的文字,可能就优先使用 1 字节、2 字节存储了,对于后纳入的文字,就要使用 3 字节或者 4 字节存储了。
正是因为他太全了,所以那些晚一些纳入的字符,在 UTF-8 中的存储所占的字节数可能就会多一些,那他的存储空间要求就会很大。
对于常用的汉字,在 UTF-8 中采用 3 字节进行编码,但是如果有一种只包含中文和 ASCII 的编码的话,就不需要使用 3 个字节,可能 2 个字节就够了。
对于大部分网站来说,基本都是只服务一个国家或者地区的,比如一个中国的网站,一般会出现简体字和繁体字以及一些英文字符,很少会出现日语或者韩文的。
也是出于这样的考虑,中国国家标准总局于 1981 年制定并实施了 GB 2312-80 编码,即中华人民共和国国家标准简体中文字符集。
后来厂商微软利用 GB 2312-80 未使用的编码空间,收录 GB 13000.1-93 全部字符制定了 GBK 编码。
有了标准中文字符集,如果是一个纯中文网站,就可以采用这种编码方式,这样可以大大节省一些存储空间的。
常用的中文编码有 GBK,GB2312,GB18030 等,最常用的是 GBK。
GB2312(1980 年),16 位字符集,收录有 6763 个简体汉字,682 个符号,共 7445 个字符:
优点:适用于简体中文环境,属于中国国家标准,通行于大陆,新加坡等地。
缺点:不兼容繁体中文,其汉字集合过少。
GBK(1995 年),16 位字符集,收录有 21003 个汉字,883 个符号,共 21886 个字符:
优点:适用于简繁中文共存的环境,为简体 Windows 所使用,向下完全兼容 GB2312,向上支持 ISO-10646 国际标准 ;所有字符都可以一对一映射到 Unicode 2.0 上。
缺点:不属于官方标准和 big5 之间需要转换;很多搜索引擎都不能很好地支持 GBK 汉字。
GB18030(2000 年),32 位字符集;收录了 27484 个汉字,同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字:
优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准。
缺点:目前支持它的软件较少。
乱码
我们还拿前面介绍过的发电报的例子来说,假设有以下场景:发报员使用"美式摩尔斯电码"将情报转换成电报,收报员接收到电报之后,通过"现代国际摩尔斯电码"进行破译。那么得到的情报内容就可能完全看不懂,这就是乱码了。
就像在计算机领域,我们把一串中文字符通过 UTF-8 进行编码传输给别人,别人拿到这串文字之后,通过 GBK 进行解码,得到的内容就会是"锟届瀿锟斤拷雮傡锟斤拷直锟斤拷锟",这就是乱码。
如以下代码:publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{ Strings="漫话编程!"; byte[]bytes=s.getBytes(Charset.forName("GBK")); System.out.println("GBK编码,GBK解码:"+newString(bytes,"GBK")); System.out.println("GBK编码,GB18030解码:"+newString(bytes,"GB18030")); System.out.println("GBK编码,UTF-8解码:"+newString(bytes,"UTF-8")); }
输出结果:GBK编码,GBK解码:漫话编程! GBK编码,GB18030解码:漫话编程! GBK编码,UTF-8解码:????????
可以看到,将中文字符,通过 GBK 编码,再使用 UTF-8 解码,得到的字符就是一串问号,这就是乱码了。
锟斤拷的前世今生
因为 Unicode 是一直在更新的,在这个过程中,肯定有一些比较新的字符他是无法表示的。
或者即使 Unicode 发布了新版纳入了某个文字,但是很多软件系统并未升级也会有这样的问题。
就像生活中一些手机厂商新出的那些 emoji 表情,在自己的手机上可以正常显示,发到其他品牌的手机上可能就无法显示。这其实也是字符集不支持导致的。
发生以上情况时,无法显示的时候也需要有一个字符来表示的,在 Unicode 中,这个字符就是 � ,他也是 Unicode 中定义的一个特殊字符。
也就是"0xFFFD REPLACEMENT CHARACTER",所有无法表示的字符都会通过这个字符来表示。
Unicode 官方有关于这个符号的介绍,从上表中可以看到,他的 10 进制表示是 65533,在 UTF-8 下,他的 16 进制形式是'0xEF 0xBF 0xBD'(三个字节)。
如果有两个连续的字符都无法显示,如"� �" ,那么在 UTF-8 编码下,16 进制表示为:0xEF0xBF0xBD 0xEF0xBF0xBD
以上这段编码,如果放到 GBK 中进行解码的话,因为 GBK 中一个汉字两个字节,那么结果就是:0xEF0xBF,0xBD0xEF,0xBF0xBD
即:0xEFBF 0xBDEF 0xBFBD
那么,如果展示出来,就是:锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。
所以,以后再见到锟斤拷,第一时间想到 UTF-8 和 GBK 的转换问题准没错。
除了锟斤拷以外,还有两组比较经典的乱码,分别是"烫烫烫"和"屯屯屯",这两个乱码产生自 VC,这是 Debug 模式下 VC 对内存的初始化操作。
VC 会把栈中新分配的内存初始化为 0xcc,而把堆中新分配的内存初始化为 0xcd。把 0xcc 和 0xcd 按照字符打印出来,就是烫和屯了。
防盗门换锁芯多少钱(金华防盗门换锁芯需要多少钱?)防盗门换锁芯多少钱(金华防盗门换锁芯需要多少钱?)金华防盗门换锁芯需要多少钱(爱柒门业)全国十大防盗门排行随着市场上防盗门越来越受到消费者的青睐,目前市面上常见的防盗门从材质上主要
网商贷手续哪里卖(网商贷上征信吗)首先我们先来了解下支付宝上的网商贷是什么?网商贷的放款主体是浙江网商银行股份有限公司,也就是说所有网商贷的放款都是浙网商银行,不会有第二家然后网商贷是专注服务小微经营者的,小微经营
美白针美白(美白针几次有效果?)美白针美白(美白针几次有效果?)美白针几次有效果?为什么医院不认可美白针美白针原理美白针,全名称之为美白抗氧注射,是一种常见的美白方法。美白针是运用一些营养的成分,将身体的健康状况
和田籽料(NGTC和田玉籽料鉴定证书解读)和田籽料(NGTC和田玉籽料鉴定证书解读)此前,业内人士得知珠宝国检(NGTC)可以检测和田玉籽料后,就在网络上放言和田玉市场将格局大变。别的不说,就说NGTC和田玉籽料鉴定证书推
黄鹤楼香烟多少钱(黄鹤楼22元烟图片)现在香烟已经成了许多人每天离不开的必需品,各式各样的香烟,五花八门,琳琅满目的堆放在路边小店以及商场超市中。香烟这个东西说来也奇怪,喜欢的人每天能够抽完一到两包,不喜欢的人闻到烟味
爱格板是颗粒板吗(打柜子用生态板还是颗粒板,怎么选?)爱格板是颗粒板吗(打柜子用生态板还是颗粒板,怎么选?)装修时板材怎么选?这一定是让人非常头痛的问题,而定制厂商推荐颗粒板,而木工推荐生态板,就更不知道怎么选了。那么,到底谁更好?而
整容大概多少钱(整容费用一般多少钱)这几天收到有人给杨医生留言说到为什么同样都是双眼皮手术,有的医生要上万元,而有的医生要几百块到上千?这个粉丝的留言是一个很好的留言,是的为什么有的医生做双眼皮手术的价格是上万元,而
做鼻哪里好(山东鼻综合哪里做得好)我对自己的鼻子不太满意,矮鼻梁宽鼻翼塌鼻头,面部整体看起来比较平坦不够立体。怀着激动忐忑的心情来到青岛伊美尔,内心是有点小害怕。但是青岛伊美尔的环境不错,服务人员态度都很好。刘长发
鼻梁骨整形(如何选择鼻整形方式?)鼻梁骨整形(如何选择鼻整形方式?)面部一枝花,全靠鼻当家。鼻型不好看,360全是死角。鼻整形是一个集设计美学艺术医学审美一切美好于一身的高难度项目,需要从鼻子的生理美学角度出发,要
苹果乔布斯(苹果之父乔布斯出生为何被他的父母为何抛弃?)苹果乔布斯(苹果之父乔布斯出生为何被他的父母为何抛弃?)苹果创始人之一,被大家称为苹果之父的乔布斯刚出生就惨遭亲身父母抛弃,他的父母究竟是怎样的人,又为何抛弃他呢?下面将我将为大家
乔布斯逝世(乔布斯的临终遗言!)乔布斯逝世(乔布斯的临终遗言!)最近状态一直不是太好,脑子乱,身体被透支,还有前几天可能有点着凉感冒了,嗓子不太舒服这个很正常,每个人都有这种时候,我自己在这种状态下,都会想起当年
按劳分配是(按劳分配与按需分配)按劳分配是(按劳分配与按需分配)劳动获取报酬。只要参加工作,就可得到工资货币。这是按劳分配。如果失业了,只能获取失业补助的生活费,也可以获取基本生活所需要的货币。这是按需分配。按劳
鬼影病毒(计算机病毒)鬼影病毒(计算机病毒)计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。计算机病毒是一个程序或一段可
天才痞子(痞子天才成功记)天才痞子(痞子天才成功记)上一回我们已经聊过毕加索年少成长的的一些经历,包括著名的蓝色时期及玫瑰时期。痞子天才成功记毕加索今天我们接着聊。黑人时期与亚威农的少女19世纪末到20世纪
中央空调家用(怎么选择家用中央空调?)中央空调家用(怎么选择家用中央空调?)炎热的夏天,暑给我们的第一个感觉就是热,很热,超级热。炎炎夏日除了冰镇瓜果和冷饮,还有被汗水浸湿黏在背上的衣服,让人恨不得时刻泡在浴缸里,以此
阿里钉钉广告语(阿里钉钉和微信开撕)阿里钉钉广告语(阿里钉钉和微信开撕)昨天有深圳网友发现在离腾讯大厦最近的深大地铁站竟然出现了竞争对手阿里钉钉的广告这则颇具挑衅的广告虽然没有点名但赤裸裸的X信明眼人一看便知说的是微
堪舆之术(古代堪舆之术是迷信还是科学?)堪舆之术(古代堪舆之术是迷信还是科学?)古代堪舆之术是以河图洛书先后天八卦为基础发展而来的应用科学技术,是我国古代先祖为追求美好生活而创立的环境应用科学。在几千年来的文化发展历程中
黄缘闭壳龟(黄缘龟怎么养?)黄缘闭壳龟(黄缘龟怎么养?)黄缘龟作为中国的国龟,在近几年的乌龟市场上,身价不断上涨。可是,涨价也挡不住龟友们饲养的热情,现在,养黄缘龟的朋友越来越多了,哪怕是进了某名录。市场上的
晏子使楚课本剧(五年级晏子使楚)晏子使楚课本剧(五年级晏子使楚)五年级晏子使楚小学生课本剧剧本五年级晏子使楚课本剧剧本时间春秋末期地点楚国人物晏子楚王武士若干人几位楚国大臣第一幕齐国与楚国都是大国,为了使两国保持
石家庄别墅(石家庄那个快被遗忘的别墅区)石家庄别墅(石家庄那个快被遗忘的别墅区)说起石家庄正定滹沱河的河心岛,估计不少人都有听说,那边当年盖了不少别墅,然后突然就荒废了,这一荒就是好几年。去年我在这附近的塔元庄小木屋住的
杜牧江南春(中华经典资源库杜牧江南春)杜牧江南春(中华经典资源库杜牧江南春)江南春唐杜牧千里莺啼绿映红,水村山郭酒旗风。南朝四百八十寺,多少楼台烟雨中。今天我们讲杜牧的一首名作,杜牧这首诗叫江南春绝句。杜牧这个人,在中
测智商小游戏(一个小游戏测测你的智商和眼力)测智商小游戏(一个小游戏测测你的智商和眼力)小伙伴们,我们要经常对大脑和眼力进行锻炼,不仅能提高自己的观察力,还能开发大脑,让自己变得越来越聪明。以下这6道题,既考智商也考眼力,现