字符编码知识的整理

442 阅读3分钟

一、基础知识

概念

  1. 字符串:是由零个或多个字符组成的有限序列。
  2. 字符:包括各国家文字、标点符号、图形符号、数字等。
  3. 字符集:多个字符的集合。

计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。

  1. 字符编码(字集码):是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。

举例

  • 常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。
  • 一般情况下一个字符集对应一种字符编码,但是Unicode比较特殊,存在多种字符编码标准,比如:UTF-8,UTF-16,UTF-32等。
  • 一张不完全分类图:
    一张图
  • 更多

二、字符编码

常见的。

1. ASCII码

  • 美国制定的编码系统,主要用来表示现代英语和其他西欧语言。
  • 首先:1 byte = 8bit 所以 1个字节可表示256种符号
  • ASCII码占用了1个字节的后7位,最高位统一为0,可表示128个字符,包括大小写字母、数字、标点符号和美式英语中使用的特殊控制字符。
  • ASCII对照表
  • 比如:
二进制 十进制 十六进制 字符 解释
0011 0001 49 0x31 1 字符1
0100 0001 65 0x41 A 大写字母A
0110 0001 97 0x61 a 小写字母a
  • 问题 :不够用~

2. 扩充ASCII编码

  • 问题:同一个编码值,在不同的编码体系里代表着不同的字。
  • 比如中文,1个字节肯定是不够的,必须使用多个字节表示一个符号。GB2312采用两个字节代表一个汉字,理论上可以表示256 * 256 = 65536个符号。

3. Unicode编码

  • 目的:统一所有文字编码。
  • 0x00000x10FFFF,共1114112个,分为17组,每组称为平面(plane),每平面拥有65536(2的16次方)个码位。
  • 通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。
  • U+0000~U+FFFF基本多文种平面 ( BMP:Basic Multilingual Plane, 简称“零号平面”, plane 0)
    2个字节表示(例如U+4AE0,共支持六万多个字符)
  • 其余16个平面为辅助平面,以代理对(surrogate pair)的形式,用4个字节的值来储存。
  • 问题:编码效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。

UTF: Unicode Transfer Format,即把Unicode转做某种格式的意思

分类 位数 长度 编码规则 其他
UTF-8 8位序列编码,即以字节为单位 变长编码 按照不同范围,可以有1-4字节的不同长度 保留了ASCII字符的编码做为它的一部分,XML及其子集HTML采用UTF-8作为标准字集
UTF-16 16位序列编码 长度相对固定 0x10000以内的字符,使用2字节表示,超出部分使用4字节表示
UTF-32 32位序列编码 长度始终固定 使用4字节表示