51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4579|回复: 1
打印 上一主题 下一主题

[Python语言及其应用] ASCII编码基础及unicode的引入

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2018-1-1 16:45:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       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))。  


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




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

     成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    沙发
     楼主| 发表于 2018-1-1 21:02:22 | 只看该作者
    字符串函数 len 可以计算字符串中 Unicode 字符的个数,而不是字节数: print(len('$'))
    print(len('\U0001f47b'))
    输出:
    1
    1


    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 10:01 , Processed in 0.172224 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表