• Learning Python 005 字符串和编码


    Python 字符串和编码

    介绍

    计算机是美国人发明的,最早只有127个字母被编码到计算机,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122

    处理中文一个字节显然是不够的,只是需要两个字节,而且还不能喝ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    世界上有上百中语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,所以,当多国语言混合在一个文本中,显示出来会有乱码。
    为了解决这个问题,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
    Unicode是使用两个字节来表示一个字符。我们来看看ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

    如果全世界都使用英语的话,就不会有这么都的编码,只有ASCII码。

    字母AASCII编码是十进制的65,二进制的01000001
    字符AUnicode编码,只需要在前面补0就可以,00000000 01000001

    所以,新的问题就出来了,现在统一的Unicode编码,乱码问题从此消失了,但是你的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间。所以本着节约的精神,有出现了UTF-8编码。UTF-8编码是把Unicode字符根据不同的编码成1~6个字节,比如:编码为0~255的字符被编码成1个字节,汉字通常是3个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

    字符 ASCII Unicode UTF-8
    A 01000001 00000000 01000001 01000001
    x 01001110 00101101 11100100 10111000 10101101

    现代计算机系统通用的字符编码工作方式:
    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    Python 字符串

    在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言:

    >>> print('这里是AoboSir博客')
    这里是AoboSir博客

    Python中有两个函数,用于将字符和对应的整数编码号之间进行转换:ord()函数 和 chr()函数:

    >>> ord('a')
    97
    >>> ord('八')
    20843
    >>> chr(57)
    '9'
    >>> chr(20113)
    '云'

    Unicode 转化为各个编码

    由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果想要在网络上传输,或者保存到磁盘上,就需需要把str变为以字节为单位的bytes,简单的说就是将Unicode编码转换为Utf-8或者ascii编码。(Pythonbytes类型的数据用带b前缀的单引号或双引号表示:x = b'ABC'
    Python中的encode()函数就是可以将Unicode编码的str字符串转换为指定编码解析的bytes
    举例:

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

    Python中的decode()函数就是可以将bytes转换成str

    >>> b'ABC'.decode('ascii')
    'ABC'
    >>> b'xe4xb8xadxe6x96x87'.decode('utf-8')
    '中文'

    len()函数用来计算str包含多少个字符

    >>> len('ABC')
    3
    >>> len('中文')
    2

    len()函数计算bytes有多少个字节数

    >>> len(b'ABC')
    3
    >>> len(b'xe4xb8xadxe6x96x87')
    6
    >>> len('中文'.encode('utf-8'))
    6

    因为Python源代码也是一个文本文件,所以,当的你源代码中有中文注释的时候,你保存源代码文件的时候,一定要保存为UTF-8编码。当运行这个Python脚本程序时,Python解释器读取源代码时,为了让它按照UTF-8编码读取,我们通常在文件开头写上:

    # -*- coding: utf-8 -*-

    这一行注释告诉了Python解释器,按照UTF-8编码读取源代码。

    你在文件中申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的。


    如果.py文件本身使用UTF-8编码,并且也申明了# -- coding: utf-8 --,打开命令提示符测试就可以正常显示中文。

    格式化

    还记得C语言中的printf()函数。就是输出格式化的字符串。我们经常会看到这类的字符串“您尾号XXX的XX账号于XX月XX日XX时XX分完成一笔XXX交易,金额为XXX元,余额XXX元。”这就是所谓的格式化字符串

    Python中,用%实现。举例:

    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('AoboSir', 100000)
    'Hi, Michael, you have $100000.'
    >>> '%2d' % 3
    ' 3'
    >>> '%d' % 3
    '3'
    >>> '%02d' % 3
    03
    >>> '%.2f' % 3.1415926
    '3.14'
    >>> '%.2f' % 5
    '5.00'

    如果你不清楚应该如何使用这些%d%s%f,你可以统统使用%s:

    >>> 'Score: %s. Gender: %s' % (59, True)
    'Score: 59. Gender: True'

    常用的占位符有:

    %d 整数
    %f 浮点数
    %s 字符串
    %x 十六进制整数

    字符串里面的%要如何转义。用%%就可以表示一个%

    >>> 'growth rate: %d %%' % 7
    'growth rate: 7 %'

    参考网站:
    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000

  • 相关阅读:
    邱洁红(帮别人名字作诗)
    为了你,我已等了一千年
    为什么才华横溢的人总是怀才不遇
    这三种力量,让你的人生从此大不一样……
    赠中华儿女
    管理的7重境界
    写下你人生101个不可思议的目标
    忙碌啊,请别带走我的诗魂
    宋彦澍(帮别人名字作诗)
    慈善家洛克菲勒先生的思想精华 自信与坚持
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928647.html
Copyright © 2020-2023  润新知