首页 > 编程 > Python > 正文

Unicode和Python的中文处理

2020-02-23 04:27:53
字体:
来源:转载
供稿:网友

在Python语言中,Uincode字符串处理一直是一个容易让人迷惑的问题。许多Python爱好者经常因为搞不清Unicode、UTF-8还有其它许许多多的编码之间的区别而大伤脑筋。笔者曾经也是这“伤脑筋一族”的成员,但经过半年多的努力,现在终于初步弄清楚其中的一些关系。现将其整理如下,与各位同仁同享。同时也希望能借这篇短文抛砖引玉,吸引更多真正的高手加入进来,共同完善我们的Python中文环境。

本文所提到的各种观点,一部分是查阅资料所得,还有一部分是笔者利用已有各种编码数据用“猜测加验证”法得到。笔者自问才疏学浅,其中怕是藏有不少错误。各位看官中不乏高手,如果有哪一位发现其中哪里有错,万望各位高人不吝赐教。笔者自己丢丑事小,观点错误误了别人事大,因此各位大可不必顾忌笔者的面子问题。

第一节 文字编码和Unicode标准

要解释Unicode字符串就必须先从什么是Unicode编码开始说起。众所周知,文本显示一直是计算机显示功能必须解决的基本问题。而计算机并不识字,它实际上是把文本看做是一串“图片”,每张“图片”对应一个字符。每个计算机程序在显示文本时,必须借助一个记录这个文字“图片”如何显示的“图片”集合,从中找到每一个字符对应“图片”的数据,并依样画葫芦地把这个字“画”到屏幕上。这个“图片”就被称为“字模”,而记录字模显示数据的集合就被称为“字符集”。为方便程序查找,每个字符的字模数据在字符集中必须是有序排列的,而且每个字符都会被分配一个独一无二的ID,这个ID就是字符的编码。而在计算机进行字符数据处理时,总是用这个编码代表它表示的那个字符。因此,一个字符集就规定了一组计算机能够处理的字符数据。显然,不同国家指定的字符集大小不同,相应的字符编码也不同。

在计算机历史上,最为广泛使用的标准化字符集当首推ASCII字符集。它实际上是美国制订的标准,针对北美用户开发。它使用7个二进制位编码,可以表示128个字符。这个字符集最终被ISO组织正式采纳为国际标准,并且大量应用在各种计算机体系上。现如今,所有PC机的BIOS中都内含了ASCII字符集的字模,其深入人心可见一斑。

但是,当计算机在各个国家大规模普及时,ASCII编码的局限性就暴露出来了:它的字符空间实在有限,无法容纳更多的字符,可是绝大多数语言需要使用的字符数目都远不止128个。为了能正确处理本国文字,各个国家官方或民间纷纷开始了设计本国文字编码集的工作,并且最终涌现出许许多多针对各个国家文字的字符编码,如针对西欧字符的ISO-8859-1编码,针对简体中文的GB系列编码,还有针对日文的SHIFT-JIS编码等等。同时,为了保证各个新的字符集能够兼容原本的ASCII文本,大多数字符集不约而同地都将ASCII字符作为自己前128个字符,并使其编码与ASCII编码一一对应。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表