【科普】字节与编码

2020-03-16 14:12:56 0点赞 0收藏 0评论

本篇简单介绍下计算机相关的编码。

知乎上编程大神刘志军有句话这么说:「一旦走上了编程之路,如果你不把编码问题搞清楚,那么它将像幽灵一般纠缠你整个职业生涯,各种灵异事件会接踵而来,挥之不去。」由此可见,编码是基础但是也容易被人忽略的点。


让我们一起来看一下。


01 二进制与字节


众所周知,计算机内部采用的是二进制,即所有的数据都用0和1来表示,逢二进一。

【科普】字节与编码

这里每个数位(只能是0或1)叫做比特(bit)。用8个比特作为一个字节(byte),一个字节最多能有2^8=256种不同的表示。


02 ASCII


计算机从最开始在美国发明出来时,到目前为止共定义了128个字符,包含英文字母、数字和常见的符号。这就是ASCII编码,用一个字节就足够表示。


【科普】字节与编码


03 Unicode

对于英文体系,一个字节足够表示,但是对于中文,成千上万个汉字用一个字节可不够用,如果中文用ASCII编码就会产生乱码。为了应对世界上纷繁复杂的语言,Unicode产生了,将所有语言统一成一套编码。常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。

如果ASCII编码转换为Unicode编码,将一个字节扩充为两个字节,在扩充的字节全部用0填充即可。

【科普】字节与编码


04 UTF-8

Unicode编码可以避免产生乱码的问题,但是会需要更大的存储空间。对于用ASCII编码就能表示的文本,如果用Unicode编码,则需要的空间会翻倍。这对于信息的存储与网络传输都是很不划算的。

为了降低成本,“可变长编码”的UTF-8编码应运而生。常用的英文字符被编码成1个字节,汉字被编码为3个字节。当文本中的英文很多时,使用UTF-8可以节省空间。

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。


05 文本文档中的编码

下面我们来看看windows自带文本文档里的编码选项。

【科普】字节与编码

ANSI编码是一种对ASCII码的拓展:ANSI码仅在前128(0-127)个与ASCII码相同,之后的字符全是某个国家语言的所有字符。由于支持的字符没有Unicode多,所以可能会遇到下图这样的问题:

【科普】字节与编码

这时候转成Unicode可以正常显示。

UTF-8和Unicode的区别和上面讲的一样,文本中英文字符较多时,保存为UTF-8在网络上传输可以占用更少的网络资源。

而对于剩下的Unicode big endian编码,以汉字“中”为例,二进制表示为‭01001110 00101101‬,Unicode码是4e2d,需要用两个字节存储,一个字节是4e,另一个字节是2d。存储的时候,4e在前,2d在后,就是Big endian方式;2d在前,4e在后,就是Little endian方式。

【科普】字节与编码


【科普】字节与编码

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是”大头方式”(Big endian),第二个字节在前就是”小头方式”(Little endian)。

平时使用不用细究,当你在Unicode和Unicode big endian中纠结的时候,选用Unicode就行。

讲的比较入门,希望对大家能有所帮助,有不对的地方欢迎指出,谢谢~

【科普】字节与编码

延伸阅读


https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896

廖雪峰的官方网站——字符串和编码


http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

阮一峰的网络日志——字符编码笔记:ASCII,Unicode 和 UTF-8

展开 收起

Thunder 迅雷 超级会员 年卡

Thunder 迅雷 超级会员 年卡

155元起

WPS 金山软件 wps超级会员月卡

WPS 金山软件 wps超级会员月卡

22元起

京东PLUS会员年卡12个月京典卡权益1年单京东会员一年京东会员年卡京东会员

京东PLUS会员年卡12个月京典卡权益1年单京东会员一年京东会员年卡京东会员

暂无报价

百度网盘 超级会员

百度网盘 超级会员

81.7元起

Thunder 迅雷 超级会员2年+6个月

Thunder 迅雷 超级会员2年+6个月

暂无报价

WPS 金山软件 WPS会员 年卡

WPS 金山软件 WPS会员 年卡

70.3元起

iQIYI 爱奇艺 爱奇艺视频黄金VIP会员 12个月

iQIYI 爱奇艺 爱奇艺视频黄金VIP会员 12个月

140元起

Tencent 腾讯 腾讯视频VIP会员 12个月

Tencent 腾讯 腾讯视频VIP会员 12个月

115元起

JINGDONG 京东 波轮洗衣机全拆洗服务 上门深度清洗

JINGDONG 京东 波轮洗衣机全拆洗服务 上门深度清洗

119元起

Thunder 迅雷 白金会员12个月 迅雷白金会员年卡

Thunder 迅雷 白金会员12个月 迅雷白金会员年卡

89元起

Microsoft 微软 活动仅7天,正版微软office2016专业版绑定帐号终身使用

Microsoft 微软 活动仅7天,正版微软office2016专业版绑定帐号终身使用

109元起

JINGDONG 京东 洗衣机清洗免拆洗 上门服务 家电清洗 家政保洁

JINGDONG 京东 洗衣机清洗免拆洗 上门服务 家电清洗 家政保洁

79元起

KFC 肯德基 电子券码 肯德基 老北京鸡肉卷两件套(3选1)兑换券

KFC 肯德基 电子券码 肯德基 老北京鸡肉卷两件套(3选1)兑换券

19.8元起

阿里云 盘 超级会员年卡 12个月

阿里云 盘 超级会员年卡 12个月

138元起

JINGDONG 京东 油烟机免拆洗 京东家电清洗 上门服务 家政保洁

JINGDONG 京东 油烟机免拆洗 京东家电清洗 上门服务 家政保洁

129元起

Apple 苹果 App Store 充值卡 500元(电子卡)500-25

Apple 苹果 App Store 充值卡 500元(电子卡)500-25

499元起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松