首页 > 其他 > 详细

位、字节、字符集、编码

时间:2021-04-18 14:42:28      阅读:23      评论:0      收藏:0      [点我收藏+]

位(bit)

计算机数据存储的最小单位,每个二进制数0、1就是1位

字节(byte、B)

计算机中数据处理的基本单位,单位换算:

  • 1B = 8bit

  • 1KB = 1024B(2^10 B)

  • 1MB = 1024KB(2^20 B)

  • 1GB = 1024MB(2^30 B)

  • 1TB = 1024GB(2^40 B)

字符

指计算机中使用的字母、数字、字和符号

字符集及编码

字符集:是一个系统支持的所有抽象字符的集合

字符编码:将符号转换为计算机可以接受的数字系统的数,成为数字代码

常用字符集和字符编码

ASCII字符集&编码

  • 美国信息交换标准代码,是基于拉丁字母的一套电脑编码系统,主要用于显示英语。包括控制字符(回车、退格、换行)和可显示字符(英文大小写、阿拉伯数字、西文符号)

  • ASCII编码使用7位(bit)表示一个字符,共128字符,ASCII扩展字符集使用8位(bit)表示一个字符,共256字符

  • 缺陷明显,不支持更多的语言,苹果电脑已经抛弃了ASCII转用Unicode

GBXXXX字符集&编码

  • GB2312字符集编码编码规则:将ASCII编码扩展的字符取消掉,规定:一个小于127的字符意义与ASCII相同,但是两个大于127的字符连在一起表示一个汉字。前一个字节(高字节)从0XA1——0XF7,后一个字节(低字节)从0XA1——0XFE,可组合7000多简体汉字。原来ASCII里原有的字符都重新编了两个字节长的编码,这就是“全角”字符,原来在127号以下的叫“半角”字符。

  • GB2312、GB2312-80 是中国国家标准简体中文字符集,基本满足了汉字的计算机处理需要

  • 但是泱泱中华文化7000个简体字符,一声呵呵送给你,这导致了后来GBK、GB18030的出现

  • GB18030是我国现时最新的内码字集,与GBK基本兼容,支持Unicode的全部汉字,共收录70244个汉字,特点如下:

    • 与UTF-8相同,采用多字节编码,每个字可由1、2、4个字节组成

    • 编码空间庞大,最多可定义161万个字符

    • 支持中国国内少数民族的文字,不需要动用造字区

    • 汉字收录范围包括繁体汉字以及日韩汉字

BIG5字符集&编码

又称大五码或五大码,是使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。

Unicode字符集&UTF编码

unicode编码系统为表达任意语言的任意字符而设计,使用4字节来表达每一字符。一一对应,没有二义性。

UCS & UNICODE

  • UCS是由ISO制定的ISO 10646标准所定义的标准字符集

UTF-32

  • 每个数字代表唯一的至少在某种语言中使用的符号的编码方案,称为UTF-32

  • UTF-32对每个字符都使用4字节,就空间而言,非常没有效率

  • 优点:可以在常数时间内定位字符串中的第N个字符,因为第N个字符从第4*N个字节开始

UTF-16

  • 尽管Unicode字符非常多,但是大多数不会用到超过65535的字符,因此就有了UTF-16(因为16位=2字节)

  • UTF-16将0 - 65535范围内的字符编码成2个字节

  • 优点:空间效率上比UTF-32高两倍,因为每个字符只需要2个字节来存储(除了65535范围之外的)

  • 编码方式

    • 如果字符编码U小于0x10000,也就是十进制的0到65535之内,则直接使用两字节表示

    • 如果字符编码U大于0x10000,由于UNICODE编码范围最大为0x10FFFF,从0x10000到0x10FFFF之间 共有0xFFFFF个编码,也就是需要20个bit就可以标示这些编码。用U‘表示从0-0xFFFFF之间的值,将其前 10 bit作为高位和16 bit的数值0xD800进行 逻辑or 操作,将后10 bit作为低位和0xDC00做 逻辑or 操作,这样组成的 4个byte就构成了U的编码。

UTF-8

  • 一种针对Unicode的可变长度字符编码,可用来表示Unciode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容

  • UTF--8使用1-4个字节位每个字符编码

    • 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)

    • 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)

    • 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码

    • 其他极少使用的Unicode辅助平面的字符使用四字节编码

  • 优点

    • UTF-8是ASCII的一个超集

    • 使用标准的面向字节的排序例程对UTF-8排序将产生与基于Unicode代码点排序相同的结果

    • UTF-8和UTF-16都是可扩展标记语言文档的标准编码。所有其它编码都必须通过显式或文本声明来指定。

    • 任何面向字节的字符串搜索算法都可以用于UTF-8的数据(只要输入仅由完整的UTF-8字符组成)。但是,对于包含字符记数的正则表达式或其它结构必须小心。

    • UTF-8字符串可以由一个简单的算法可靠地识别出来。就是,一个字符串在任何其它编码中表现为合法的UTF-8的可能性很低,并随字符串长度增长而减小

  • 缺点

    • 因为每个字符使用不同数量的字节编码,所以寻找串中第N个字符是一个O(N)复杂度的操作 — 即,串越长,则需要更多的时间来定位特定的字符。同时,还需要位变换来把字符编码成字节,把字节解码成字符。

位、字节、字符集、编码

原文:https://www.cnblogs.com/yuanqiu/p/14671378.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!