字符集和编码

更新日期: 2019-03-31阅读: 4.8k标签: 

字符集是什么

字符集 Charset :是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。——看的是不是想打人


举个栗子,现在这张表你把红色的盖住,只看蓝色的,他就是个ASCII字符集。不过现在是10进制的,真正的存储到电脑中是要转成二进制的。

有的同学可能要问了,我只看蓝色的,全都是数字,我怎么知道你那个数字要表达的是什么意思。现在你在把盖住的红色的内容打开,他就变成了ascii码对照表。它就表示了ascii字符集与计算机二进制之间的对应关系。这种自然语言的字符与二进制数之间的对应规则叫做字符编码



编码是什么

编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。  --来自百度百科

解码是一种用特定方法,把数码还原成它所代表的内容或将电脉冲信号、光信号、无线电波等转换成它所代表的信息、数据等的过程。  --来自百度百科

继续上边的例子,现在ascii字符集与计算机语言之间的对应关系已经存在了。计算机中把从其他字符翻译成计算机中的二进制叫做编码(例如:ASCII码对照表中,a对应的是73,人类输入a,保存到计算机中,被翻译成了二进制的97,这个过程叫编码)。

反过来计算机保存的"0110 0001"也就是十进制的97,显示在你的显示屏幕上的时候是根据ASCII码对照表反向翻译过的,这个过程叫解码

如果按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。(A规则可以理解成ASCII对应关系,b规则理解为utf-编码)


字符集的发展史

ASCII字符集 :

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)。 基本的ASCII字符集,使用7位(bits)表示一个字符,共128字符。ASCII的扩展字符集使用8位(bits)表示一个字符,共256字符,方便支持欧洲常用字符。 

 

ISO-8859-1字符集:

拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰、丹麦、德语、意大利语、西班牙语等。 ISO-5559-1使用单字节编码,兼容ASCII编码。 

 

GBxxx字符集:

GB就是国标的意思,是为了显示中文而设计的一套字符集。 

GB2312:简体中文码表。一个小于127的字符的意义与原来相同。但两个大于127的字符连在一起时,就表示一个汉字,这样大约可以组合了包含7000多个简体汉字,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。 

GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等。 

GB18030:最新的中文码表。收录汉字70244个,采用多字节编码,每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等。 

 

Unicode字符集 :

Unicode编码系统为表达任意语言的任意字符而设计,是业界的一种标准,也称为统一码、标准万国码。 它最多使用4个字节的数字来表达每个字母、符号,或者文字。有三种编码方案,UTF-8、UTF-16和UTF-32。最为常用的UTF-8编码。  

 1. 128个US-ASCII字符,只需一个字节编码。 
 2. 拉丁文等字符,需要二个字节编码。 
 3. 大部分常用字(含中文),使用三个字节编码。
 4. 其他极少使用的Unicode辅助字符,使用四字节编码。 

ASCII:简单的说就是美国发明了计算机之后,用7位(bits)表示一个字符,来表达自己语言的文字,一个字节是8位,还空了一位,最高位被置为0。然后国际商业机器公司又加入了一些扩展,比如音标什么的,这下把8位全用上了。

ISO-8859-1:欧洲其他国家用电脑的时候发现全是英语,你让我们这些母语不是英语的人怎么办,于是制定了ISO-8859-1字符集,兼容ASCII编码(比如ASCII中97表达的是是小写的a,ISO-8859-1中97依然是小写的a,ISO-8859-1没有修改ASCII原来的字符集,只是在你的基础上扩展)。

GBxxx:
GB2312:终于,计算机传到中国了。美国人发明的ascii码,只要表达大小写26个字母,加上些字符就行了,但是中国的汉字很多,无法用1字节也就是八位标识,所以当时就制定了GB2312,规定了每个字占据2bytes。由于要和ASCII兼容,那这2bytes最高位不可以为0了(否则和ASCII会有冲突)。
GBK:之前只知道中国汉字多,但是没有想到这么多啊,原来规定汉子和计算机语言对应关系的时候,漏掉了好多汉字,所以在GB2312的基础上做了个扩展。
GB18030:后来发现中国的汉字确实很多,上次的GBK依然有漏掉的汉字。那就继续加吧,不过这次扩展的时候又遇到了新的问题:2字节一共才16位,最多才能表达65535个汉字,为了不跟ASCII冲突最高位又不能用,这下最多只能规定3万多了。因此GB18030多出来的汉字使用4bytes编码。当然,为了兼容GBK,这个四字节的前两位显然不能与GBK冲突。

Unicode:统一各个国家所有文字的编码,Unicode应运而生,最多使用4个字节的数字来表达每个字符。

字符集和字符编码那点事

计算机要准确的存储和识别各种字符集符号,需要进行字符编码,一套字符集必然至少有一套字符编码。
等等,一套字符集必然至少有一套字符编码,那岂不是……
没错,每套字符集可能会有多个字符编码,就像这样

这是什么意思哪,其实也很好理解,就是字符集是固定的,比如现在有一套字符集,只有小写的26个字母。A在编写对应规则的时候把97对应a(ascii),但是B在编写的时候非要把计算机中的98对应a。这就是同样的字符集,我用不同的对应规则去翻译成计算机的语言,翻译成的计算机序言肯定不是一样的。
但是utf-8和utf-16、utf-32,并没有改变对应规则,只是改变了在计算机中的存储长度。
还记得上边说过的Unicode最多只能存四个字节吗,这就意味着,Unicode中不同的字符可以用1个、2个、3个或者4个字节保存。
UTF-16就是任何字符对应的数字都用两个字节来保存。
UTF-8时表示一个字符是可变的,有可能是用一个字节表示一个字符,也可能是两个,三个.当然最多不能超过3个字节。
UTF-32就是把所有的字符都用32bit也就是4个字节来表示。
当指定了编码,它所对应的字符集自然就指定了


链接: https://fly63.com/article/detial/2635

js之汉字与Unicode码的相互转化

js unicode是以十六进制代码外加开头\\u表示的字符串。本文将讲解通过js实现unicode转化为汉字的方法,实现汉字转Unicode码。

中文utf 8占几个byte——UTF-8中一个汉需要占用三个字节

中文汉字在utf-8中到底占几个字节,一般是3个字节,最常见的编码方式是1110xxxx 10xxxxxx 10xxxxxx。

终于搞懂了回车与换行的区别

关于换行和回车其实平时我们不太在意,所以关于两者的区别也不太清楚,在平时开发时可能会遇到一些文件处理的问题,放到不同的操作系统上出现各种坑。那么回车和换行到底有哪些区别呢?

ascii码表/ascii编码_最全的ASCII码对照表

ASCII是基于拉丁字母的一套电脑编码系统。这篇文章主要介绍: 什么是ASCII、ASCII简介、ASCII码产生、ASCII码的算法、汉字编码、ASCII码图、最全的ASCII码对照表

js编码方式详解

escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法,而他们之间的异同却困扰了很多的Javascript初学者,今天我就在这里对这三个方法详细地分析与比较一下。

js实现unicode码字符串与utf8字节数据互转

js的string变量存储字符串使用的是unicode编码,要保存时必须选择其他编码后进行传输,比如转成utf-8,utf-32等。存储到数据库中为utf-8编码,可以正确支持中文、emoji表情、英文混合的字符串编码互转

Unicode字符集和UTF8编码编码的前世今生

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了

web开发中URL编码

因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的。也就是说,url的参数传递的时候,需要遵循一定的url规范才能正确的传送。通常如果一样东西需要编码,说明这样东西并不适合传输。

带你了解字符编码的前世今生

世界第一台计算机诞生了。计算机由硬件和系统软件组成,它最基本的功能就是存储、表示与处理信息。通俗地说,信息其实就是由各种各样的字符组成,比如英文字母、汉字以及其他国家的语言等。

常见Web报错code码

1xx-信息提示:这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。2xx-成功:这类状态代码表明服务器成功地接受了客户端请求。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!