作家
登录

一筹莫展?来看看字符编码的前世今生吧

作者: 来源: 2017-11-02 15:16:43 阅读 我要评论


媒介

很多法度榜样员对字符编码不太懂得,固然他们大年夜概知道 ASCII、UTF8、GBK、Unicode 等术语概念,但在写代码过程中照样会碰到各类奇怪的编码问题,在 Java 中最常见的是乱码,而 Python 开辟中碰到最多的是编码缺点,如:UnicodeDecodeError、UnicodeEncodeError,几乎每个 Python 开辟者都邑碰着这种问题,对此都是束手无策,这篇文┞仿大年夜字符编码的来源开端,讲述了编程中应当若何应对编码的问题,经由过程懂得本文,你可以安闲地定位、分析、解决字符编码相干的问题。

说到「字符编码」我们先要懂得什么是编码以及为什么要编码。

  1. #!/usr/bin/python 
  2. # -*- coding: utf-8 -*- 

什么是编码

但凡学过计算机的同窗都知道,计算机只能处理0和1构成的二进制数据,仁攀类借助计算机所看到的、听到的任何信息,包含:文本、视频、音频、图片在计算机中都是以二进制情势进行存储和运算。计算机善于处理二进制数据,然则仁攀类对于二进制数据显得捉襟见肘,为了降低人与计算机的交换成本,人们决定把每个字符进行编号,比如给字母 A 的编号是 65,对应的二进制数是「01000001」,当把 A 存到计算机中时就用 01000001 来代替,当要加载显示在文件中或网页顶用来阅览时,就把二进制数转换成字符 A,这个过程中就会涉及到不合格局数据之间的转换。

编码(encode)是把数据大年夜一种情势转换为别的一种情势的过程,它是一套算法,比如这里的字符 A 转换成 01000001 就是一次编码的过程,解码(decode)就是编码的逆过程。今天我们评论辩论的是关于字符的编码,是字符和二进制数据之间转换的算法。暗码学中的加密解密有时也称为编码与解码,不过它不在本文评论辩论范围内。

束手无策?来看看字符编码的前世此生吧

尽管我们有了属于本身的字符集和字符编码 GBK,可世界上还有很多国度拥有本身的说话和文字,比如日本用 JIS,台甲鱼 BIG5,不合国度之间交换起来就很艰苦,因为没有同一的编码标准,可能同一个字符,在A国度用两字字节存储,而到了B国度是3个字节,如许很轻易出现编码问题,于是在 1991 年,国际标准化组织和同一码联盟组织各自开辟了 ISO/IEC 10646(USC)和 Unicode 项目,这两个项目标目标都是欲望用一种字符集来同一全世界所有字符,不过很快两边都意识到世界上并不须要两个不兼容的字符集。于是他们就编码问题进行了异常友爱地会晤,决定彼此把工作内容归并,固然项目照样自力存在,各自宣布各自的标准,但前提是两者必须保持兼容。不过因为 Unicode 这一名字比较好记,因而它应用更为广泛,成为了事实上的同一编码标准。

什么是字符集

字符集是一个体系支撑的所有抽象字符的集合。它是各类文字和符号的总称,常见的字符集种类包含 ASCII 字符集、GBK 字符集、Unicode字符集等。不合的字符集规定了有限个字符,比如:ASCII 字符集只含有拉丁文字字母,GBK 包含了汉字,而 Unicode 字符集包含了世界上所有的文字符号。

有人不禁要问,字符集与字符编码是什么关系?别急,先往下面

ASCII:字符集与字符编码的来源

世界上第一台计算机,1945年由美国宾夕法尼亚大年夜学的两位传授-莫奇利和埃克特设计和研制出来,美国人草拟了计算机的第一份字符集和编码标准,叫 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),一共规定了 128 个字符及对应的二进制转换关系,128 个字符包含了可显示的26个字母(大年夜小写)、10个数字、标点符号以及特别的┞菲握符,也就是英语与西欧说话中常见的字符,这128个字符用一个字节来表示绰绰有余,因为一个字节可以表示256个字符,所以当前只应用了字节的7位,最高位用来算作奇偶校验。如下图所以,字符小写 a 对应 01100001,大年夜写 A 对应 01000001。

束手无策?来看看字符编码的前世此生吧

ASCII 字符集是字母、数字、标点符号以及控制符(回车、换行、退格)等构成的128个字符。ASCII 字符编码是将这128个字符转换为计算机可识其余二进制数据的一套规矩(算法)。如今可以答复前面的那个问题了,平日来说,字符集同时定义了一套同名的字符编码规矩,例如 ASCII 就定义了字符集以及字符编码,当然这不是绝对的,比如 Unicode 就只定义了字符集,而对应的字符编码是 UTF-8,UTF-16。

ASCII 由美国国度标准学会制订,1967年定案,最初是美国国度标准,后来被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准,实用于所有拉丁文字字母。

EASCII:扩大的ASCII

跟着计算机的赓续普及,计算机开端被钭欧等国度应用,然后西欧说话中还有很多字符不在 ASCII 字符集中,这给他们应用计算机造成了很大年夜的限制,就比如在中国,你只能用英语跟人家交换一样。于是乎,他们想着办法把 ASCII 字符集进行扩充,认为 ASCII 只应用了字节的前 7 位,如不雅把第八位也应用起来,那么可表示的字符个数就是 256。这就是后来的 EASCII(Extended ASCII,延长美国标准信息交换码)EASCII 码比 ASCII 率攀扩充出来的符号包含表格符号、计算符号、希腊字母和特别的拉丁符号。

然后 EASCII 并没有形成同一的标准,各国个商家都有本身的小算盘,都想在字节的高位做文┞仿,比如 MS-DOS, IBM PC上应用了各自定义的编码字符集,为了停止这种纷乱的局面,国际标准化组织(ISO)及国际电工委员会(IEC)结合制订的一系列8位元字符集的标准,叫 ISO 8859,全称ISO/IEC 8859,它在 ASCII 基本之上扩大而来,所以完全 ASCII,ISO 8859 字符编码筹划所扩大的┞封128个编铝闼楝只有0xA0~0xFF(十进制为160~255)被应用,其实 ISO 8859是一组字符集的总称,旗下共包含了15个字符集,分别是 ISO 8859-1 ~ ISO 8859-15,ISO 8859-1 又称之为 Latin-1,它是西欧说话,其它的分别代表 中欧、南欧、北欧等字符集。

 1/7    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  总是记不住密码怎么办?可以把它存在衬衫上

捷报道,美国华盛顿大年夜学的研究人员正在研究所谓的“智能织物”,他们的重点放在磁化纺织品上。这种纺织品可以存储能被磁力仪攫取的少量数据,包含存储在大年夜多半智妙手机内部的数据。这>>>详细阅读


本文标题:一筹莫展?来看看字符编码的前世今生吧

地址:http://www.17bianji.com/lsqh/38408.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)