admin 发表于 2018-1-1 16:45:18

ASCII编码基础及unicode的引入

   ASCII诞生于20世纪60年代,那时的计算机还和冰箱差不多大,运算速度也仅仅比人力稍快一些。众所周知,计算机的基本存储单元是字节(byte),它包含 8 位 / 比特(bit),可以存储 256 种不同的值。
   出于一些设计目的, ASCII 只使用了 7 位(128 种取值): 26 个大写字母、 26 个小写字母、10 个阿拉伯数字、一些标点符号、空白符以及一些不可打印的控制符。不幸的是,世界上现存的字符远远超过了ASCII 所能支持的 128 个。设想在一个只有 ASCII 字符的世界中,你可以在咖啡厅点个热狗作为晚餐,但永远也点不到美味的Gewürztraminer酒。为了支持更多的字母及符号,人们已经做出了许多努力,其中有些成果你可能见到过。例如下面这两个:
• Latin-1 或 ISO 8859-1
• Windows code page 1252
   上面这些编码规则使用全 8 比特(ASCII 只使用了 7 比特)进行编码,但这明显不够用,尤其是当你需要表示非印欧语系的语言符号时。 Unicode 编码是一种正在发展中的国际化规范,它可以包含世界上所有语言以及来自数学领域和其他领域的各种符号。
    Unicode 为每个字符赋予了一个特殊的数字编码, 这些编码与具体平台、程序、语言均无关。
    —— Unicode 协会
    Unicode Code Charts 页面(http://www.unicode.org/charts/)包含了通往目前已定义的所有字符集的链接, 且包含字符图示。最新的版本(6.2)定义了超过 110 000 种字符,每一种都有自己独特的名字和标识数。 这些字符被分成了若干个 8 比特的集合,我们称之为平面(plane)。前 256 个平面为基本多语言平面(basic multilingual plane)。你可以在维基百科中查看更多关于 Unicode 平面的信息(http://en.wikipedia.org/wiki/Plane_(Unicode))。

static/image/hrline/4.gifstatic/image/hrline/4.gif
可以通过python的内置unicodedata模块完成unicode转换:
• lookup()——接受不区分大小写的标准名称,返回一个 Unicode 字符;
• name()——接受一个 Unicode 字符,返回大写形式的名称。
代码:import unicodedata
def unicode_test(value):
    import unicodedata
    name=unicodedata.name(value)
    value2=unicodedata.lookup(name)
    print('value="%s",name="%s",value2="%s"'%(value,name,value2))
unicode_test('A')#拉丁字母A
unicode_test('\u00a2') #unicode货币字符
unicode_test('\u20ac')#unicode货币字符
print(unicodedata.lookup('LATIN CAPITAL LETTER A'))
print(unicodedata.lookup('CENT SIGN'))
print(unicodedata.lookup('EURO SIGN'))输出:




admin 发表于 2018-1-1 21:02:22

字符串函数 len 可以计算字符串中 Unicode 字符的个数,而不是字节数: print(len('$'))
print(len('\U0001f47b'))
输出:
1
1


页: [1]
查看完整版本: ASCII编码基础及unicode的引入