字符集与编码

字符编码

定义一套规则对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数。

英文有 26 个字母,加大写字母,加符号,也才一百多个,所以美国人制定了一套编码规则来表示他们的语言,就是 ASCII 编码规则,有 127 个符号。ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。计算机普及后,对于各国人民在他们地区内扩展,也叫本地化编码,这些不同国家地区自顾自的制定编码规则,造成跨国交流非常混乱。比如中文世界里的编码就要 GBK,GB2312,GB18030,BIG5。’GB‘就是国标的缩写,还有韩文日文的编码更多。。为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的 Code Point,以满足跨语言、跨平台进行文本转换、处理的要求。

在网络传输需要兼顾效率,就有了 UTF(UCS Transformation Format)编码规则(可变长规则)整部编码史的发展,也记录着文本数据记录方式的变迁。那么现在就可以很轻松的面对乱码了,计算机对字符的处理分为两个阶段,当编码和解码的规则不一样是就会产生乱码。解码的时候如果没有显示指定编码规则,那计算机就会更加文本开端的字符去猜测编码规则。

基本概念

概念 概念描述 举例
字符 一个信息单位,各种文字和符号的总称 ‘中’, ‘a’, ‘1’, ‘$’, ‘¥’, …
字符集 字符的集合 ASCII 字符集, GB2312 字符集, Unicode 字符集
字符编码 将字符集中的字符,编码为特定的二进制数 ASCII 编码,GB2312 编码,Unicode 编码
字节 计算机中存储数据的单元,一个 8 位(bit)的二进制数 0x01, 0x45, …

字符(Character)是最基础的概念,在电脑和电信领域中,字符是一个信息单位,它是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。比如,一个汉字,一个英文字母,一个标点符号等都是一个字符。

字符集是字符的集合。字符集的种类较多,每个字符集包含的字符个数也不同。比如,常见的字符集有 ASCII 字符集、GB2312 字符集、Unicode 字符集等,其中,ASCII 字符集共有 128 个字符,包含可显示字符(比如英文大小写字符、阿拉伯数字)和控制字符(比如空格键、回车键);GB2312 字符集是中国国家标准的简体中文字符集,包含简化汉字、一般符号、数字等;Unicode 字符集则包含了世界各国语言中使用到的所有字符。

字符编码,是指对于字符集中的字符,将其编码为特定的二进制数,以便计算机处理。常见的字符编码有 ASCII 编码,UTF-8 编码,GBK 编码等。一般而言,字符集和字符编码往往被认为是同义的概念,比如,对于字符集 ASCII,它除了有字符的集合这层含义外,同时也包含了编码的含义,也就是说,ASCII 既表示了字符集也表示了对应的字符编码。

代码点(Code Point),是一个数字,用来表示字符集中的一个字符,也就是字符编码集中的一个数,例如 Unicode 编码中, ‘A’的 code point 就是 65(在 Unicode 中通常写作 U+0041)。代码空间(Code Space),就是一个编码集中,code point 的范围,例如 Unicode 编码的 code space 就是 0x0000 - 0x10FFFF。字符编码方案(Character Encoding Scheme),它定义了将字符用一个或多个固定长度的代码单元的方案,如前文提到的"utf-8 编码方式"就是一个字符编码方案,其它的还有 UTF16,UTF32,GBK 等等。编码单元,就是编码方案中固定长度的最小编码单元,如 UTF8 的编码单元是 1bit,UTF16 是 2bit,UTF32 是 4bit。