zoukankan      html  css  js  c++  java
  • Python字符串编码

    Python字符串与编码
    计算机对文本进行编码的方式

    ASCII码
    由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

    UNICODE码
    由于计算的的发展与普及,越来越多的国家开始使用计算机,然而每个国家的文字基本都不相同,要通过计算机进行处理的话要进行不同的编码,显然一个字节的ASCII码是不够的。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
    捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。
    如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的ASCII码是01000001,Unicode编码是00000000 01000001。

    UTF-8码
    在统一使用UNICODE编码之后,所有的语言都不冲突了,也没有乱码了,但是又出现了另一个问题:如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以此时UTF-8编码又应运而生:将UNICODE编码转化为可变长度的UTF-8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

    字符 ASCII Unicode UTF-8
    A 01000001 00000000 01000001 01000001
    中 x 01001110 00101101 11100100 10111000 10101101
    从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:
    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。例如在用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

    Python的字符串与编码
    由于Python的诞生早于UNICODE编码的诞生时间,所以最早python仅支持ASCII码,系统中默认的’ABC’也都是ASCII编码,python后来添加了对于UNICODE编码的支持,用u'...'表示,比如

    >>> print u'我是谁?'
    我是谁?
    >>> u'我是谁?'
    u'u6211u662fu8c01uff1f'

    那么ASCII码和UNICODE编码之间如何转换呢?字符串’xxx’虽然是ASCII码,但也可以看作是UTF-8码,但是u’xxx’只能是UNICODE码。将u’xxx’转化为UTF-8的’xxx’使用.encode(‘utf-8’)函数:

    >>> u'ABC'.encode('utf-8')
    'ABC'
    >>> u'中文'.encode('utf-8')
    'xe4xb8xadxe6x96x87'

    反过来,把UTF-8编码表示的字符串’xxx’转换为Unicode字符串u’xxx’用decode(‘utf-8’)方法:

    >>> 'ABC'.decode('utf-8')
    u'ABC

    Python的格式化输出
    在python中,格式化输出采用和C语言一样的方式,不过其变量要采用%符号来作为前缀。

    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'

    对于UNICODE编码的字符串,其用法也一样,只是要确保替换的字符串也是UNICODE编码的字符串。

    >>> u'Hi, %s' % u'Michael'
    u'Hi, Michael'


    原文:https://blog.csdn.net/mountzf/article/details/52727735

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/wisir/p/10919298.html
Copyright © 2011-2022 走看看