美文网首页
字符 & 字符集 & 字符编码

字符 & 字符集 & 字符编码

作者: 张崩崩得了懒癌 | 来源:发表于2017-09-09 22:58 被阅读32次

    字符(Char):是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英文字母是一个字符,一个阿拉伯数字是一个字符,一个标点符号也是一个字符。

    字符集(Charset):是一个系统所支持的所有的抽象字符的集合。其中字符为各种文字和符号的总称。

    字符编码(Character Encoding):是一套法则,使用该法则,可以使自然语言中的一套字符集合 与 其他东西的一个集合进行配对。即在符号结合和数字系统之间建立一套关系。通俗地讲,字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

    常用的字符集:

    常见的有:ASCII字符集,GB2312字符集,BIG5字符集,Unicode字符集

    ASCII字符集和编码:

    ASCII是基于拉丁字母的一套编码,主要用于现代英语,勉强支持西欧语言。

    ASCII字符集:包含了控制字符(换行,退格键,回车键),可显示字符等。

    ASCII编码:将ASCII字符集转换为计算机可以识别的编码规则。使用7位(bits)表示一个字符,可以支持128个字符。使用8位(bits)表示一个字符,共支持256个字符

    ASCII编码最大的缺点:只能显示26个基本的英文字符,阿拉伯数字,英式标点符号等共256个字符。

    GBXXXX字符集和编码:

    天朝有了计算机后,必须引入一套规则,用于将汉子转换为计算机可以接受的数字系统的数。

    天朝专家把127号以后的字符都取消掉,并且规定:小于127的字符的意义与原来相同,大于127的字符,每两个连在一起表示一个汉字,前面一个字节成为高字节,后面一个字节成为低字节,这样大约组合出来7000个左右的汉字,在这些编码里,连ASCII里本来就有的数字,标点符号统统重写编写了一遍,这就是常说的“全角”“半角”字符,127以前的称谓半角字符。

    特点:采用了多字节编码,每个字可以由1,2个或者4个字节组成

    BIG5字符集和编码:

    BIG5字符集主要用来表示“繁体中文”,称为大5码。它是一套双字节字符集,使用了双八码存储方法,使用两个字节来安放一个字,第一个字节称为“高位字节”,第二个字节称为低位字节。

    伟大的创想-Unicode:

    为了解决世界上各种语言的问题,防止互相访问出现乱码的情况,产生了Unicode。

    Unicode是基于通用字符集发展的,被称为统一码,万国码。

    Unicode 与 UTF-8 UTF-16 UTF-32:

    简述:Unicode是字符集,UTF-8/16/32 是三种字符编码方案:

    UTF-32:

    使用4个字节(32位)的数字来表达每个字母,数字。每个数字使用4个字节来表示,就空间效率而言,是非常没有效率的。

    这种方法也有优点,因为其每个字母/数字使用4个字节数字来表示的,所以一个字符串中的第N个字符是从4*N个字节开始的,即每一个字符的长度都是固定的。

    UTF-16:

    尽管unicode表示的字符非常多,但是通常使用不会超过前65535个字符,所以,UTF-16使用2个字节(16位)的数字来表示系统中的每个字母,数字,符号等。它最明显的优点就是空间效率上是utf-32的两倍。

    UTF-8:

    UTF-8是基于Unicode的一种可变长度的字符编码,它可以表示Unicode中的任何一个字符,且编码的第一个字节与ASCII完全兼容。

    UTF-8使用一到四个字节来表示一个字符。

    (1) 128个ASCII字符,只需要1个字节编码

    (2) 带有附加符号的拉丁文,阿拉伯文等需要2个字节编码

    (3) 其他基本多文种平面,通常使用3个字节编码

    (4) 极少多食用4个字节编码

    优点:

    UTF-8不存在字节顺序的问题(UTF-16存在),一份以utf-8编码的文件,在不同的计算机之间,是一份相同的bit流。

    UTF-8是ASCII的超集,因为一个纯ASCII编码的字符,也是一个合法的UTF-8编码字符。

    缺点:

    因为每个字符使用不同数量的字节编码,所以一个字符串中想要定位一个字符的位置,就会很复杂。

    Unicode 转 UTF-8的规则:

    比如“汉”字,其Unicode编码是6C49,6C49在 0800-FFFF之间,所以才用第三套模版转换。

    6C49转换成二进制是0110 1100 0100 1001 ,把这个比特流转换成第三套模版就是 0110 110001 001001

    然后填充到1110xxxx 10xxxxxx 10xxxxxx中x的位置上

    即为11100110 10110001 10001001  即E6 B1 89 这就是UTF8编码

    一个有趣的问题,当你在windows电脑桌面建立一个文本文件,输入“联通”两个字后,重新打开,会出现乱码。

    答:

    文本文件的默认编码是ANSI,属于GBxx系列,每个汉字采用2个字节编码。所以“联通”对应的编码为:

    可以看到第一个字符的 高位字节前三位是110  低位字节前2位是10

    第二个字符的 高位字节前三位110,低位字节前2位是10

    这一下就跟UTF-8编码的第二套规则相符合,系统就会认为这是utf8编码,然后在解码的时候就采用了错误的方式,导致了乱码。

    相关文章

      网友评论

          本文标题:字符 & 字符集 & 字符编码

          本文链接:https://www.haomeiwen.com/subject/gsoajxtx.html