字符编码小结

简介: 预备知识 ==============================存储器位(bit),字节(byte),字(word), 双字(double word)1 byte = 8 bits1 word = 2 bytes = 16 bits1 double word = 2 words = 4 bytes = 32 bits ASCII编码 ==============================单字节来自远古时代。


预备知识

==============================
存储器

位(bit),字节(byte),字(word), 双字(double word)

1 byte = 8 bits
1 word = 2 bytes = 16 bits
1 double word = 2 words = 4 bytes = 32 bits


ASCII编码

==============================
单字节

来自远古时代。
计算机最初是在美国等国家发明的,所以只需要把英文字母、数字、标点符号表示出来就好。
这些字符不多,也就200多个。

使用一个字节,从00000000到11111111共2^8=256个字符。
如:01000001(即十进制的65)表示字符"A"

Python的chr和ord函数,可以对ASCII编码进行了转换。
如:chr(65) == 'A', ord('A') == 65


ISO-8859-1编码

==============================
单字节

ISO-8859-1编码是单字节编码,向下兼容ASCII。
其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

此字符集主要支持欧洲使用的语言。


Unicode编码

==============================
双字节

两个字节,从00000000 00000000到11111111 11111111共表示256*256个字符

在Unicode中,原本ASCII中的127个字符只需在前面补一个全零的字节即可,
比如前文谈到的字符‘a’:01100001,在Unicode中变成了00000000 01100001。

优点:基本各种语言的字符,如东亚文字,阿拉伯文字,藏文字等等
缺点:对英文来说浪费严重,原本只需一个字节就能传输的英文现在变成两个字节,非常浪费存储空间和传输速度。


unicode在很长一段时间内无法推广,直到互联网的出现。


这是 Python3 中的默认编码!!!!!!

 


UTF-8编码

==============================
可变长字节

使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

比如​汉字的"中"字在Unicode中是01001110 00101101,而在UTF-8编码中是11100100 10111000 10101101。


GB2312编码

==============================
双字节编码

GB2312编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE。

GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用。
GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。
同时,GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。


GBK编码

==============================
双字节编码

GB2312编码的扩展,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902。
总共收录了883个符号,21003个汉字及提供了1894个造字码位。

由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。


ANSI编码

==============================
混合编码

Windows简体中文操作系统中,ANSI是默认的编码方式。

对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版)


目录
相关文章
|
3月前
|
自然语言处理
字符编码
字符编码。
58 15
|
6月前
|
存储 自然语言处理 数据可视化
字符集编码(三):Unicode
中国的 GB 编码和日本的 JIS 编码在兼容 ASCII 的同时,又给 ASCII 中的可见字符做了个“全角”编码(原 ASCII 中的字符被称为“半角”字符)。所谓全角和半角字符,在字形和字意上都完全相同,只是全角字符占用宽度(注意不是字形本身的宽度)是半角字符的两倍(据说是为了中英文混排时的美观效果),按照 Unicode 的设计原则,这种问题应该交由文字渲染程序去处理,
57 1
|
7月前
|
存储 JavaScript Java
[字符编码] 理论篇:常见字符集与编码方式
[字符编码] 理论篇:常见字符集与编码方式
185 0
|
存储 网络协议 安全
字符编码技术专题(一):快速理解ASCII、Unicode、GBK和UTF-8
今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。 这个问题比我想象的复杂,午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的总结,主要用来整理自己的思路。我尽量写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的*石,对于程序员来说尤其重要,字符编码的知识是必须要懂的。
120 0
|
存储 编解码 算法
字符编码的前世今生
字符编码的前世今生
195 0
|
存储 XML SQL
字符编码与使用中的问题
作为中文环境下开发的Java程序员,UTF-8编码是我们经常使用的编码方式。 字符编码是怎么来的?为什么使用UTF-8编码?使用字符编码的时候回遇到什么坑? 这些问题你遇到过或者思考过吗。
156 0
|
存储 Java 关系型数据库
【技术干货】理解Unicode字符编码
本文对字符编码Unicode以及UTF8和UTF16的编码原理进行了详细说明
685 1
|
存储 编解码 Windows
理解字符编码
理解字符编码
理解字符编码
|
存储 自然语言处理 JavaScript
【字符编码】彻底理解字符编码
在解决昨天的问题时,又引出了很多新的问题,如为什么要进行编码,这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unicode之间的关系,笔者想要彻底理解字符编码背后的故事,遂进行了探索,具体笔记如下。如园友能读完本篇文章,我相信会解开很多疑惑
308 0
【字符编码】彻底理解字符编码
|
存储 自然语言处理 JavaScript
【字符编码】彻底理解字符编码
 在解决昨天的问题时,又引出了很多新的问题,如为什么要进行编码,这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unicode之间的关系,笔者想要彻底理解字符编码背后的故事,遂进行了探索,具体笔记如下。如园友能读完本篇文章,我相信会解开很多疑惑。
327 0
【字符编码】彻底理解字符编码