返回介绍

字符串处理

发布于 2024-05-30 23:22:17 字数 7289 浏览 0 评论 0 收藏 0

字符串和编码

计算机系统通用的字符编码工作方式:在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 编码。
UTF-8 编码: 它把 Unicode 编码转化为“可变长编码”。常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间。

在Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言。
由于 Python 源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为 UTF-8 编码。当Python 解释器读取源代码时,为了让它按 UTF-8 编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行告诉Linux系统应该运行哪个解释器。
第二行告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

  1. 以 Unicode 表示的 str 通过 encode()方法可以编码为指定的 bytes,例如:

    >>> 'ABC'.encode('ascii')
    b'ABC'
    >>> 'ABC'.encode('utf-8')
    b'ABC'
    >>> '中文'.encode('utf-8')
    b'\xe4\xb8\xad\xe6\x96\x87'
    

    在 bytes 中,无法显示为 ASCII 字符的字节,用\x##显示。
    纯英文的 str 可以用 ASCII或UTF-8 编码为 bytes,内容是一样的,含有中文的 str可以用 UTF-8 编码为 bytes。
    含有中文的 str 无法用 ASCII 编码,因为中文编码的范围超过了ASCII编码的范围, Python 会报错。

  2. 如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把 bytes 变为 str,就需要用 decode()方法:

    >>> b'ABC'.decode('ascii')
    'ABC'
    >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
    '中文'
    
  3. 要计算 str 包含多少个字符,可以用 len()函数:

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

    len()函数计算的是 str 的字符数,如果换成 bytes, len()函数就计算字节数:

    >>> len(b'ABC')
    3
    >>> len(b'\xe4\xb8\xad\xe6\x96\x87')
    6
    >>> len('中文'.encode('utf-8'))
    6
    
  4. 在操作字符串时,我们经常遇到 str 和 bytes 的互相转换。为了避免乱码问题,应当始终坚持使用 UTF-8 编码对 str 和 bytes 进行转换。

格式化

旧式风格

旧的格式化方式和 C 语言是一致的,用%实现:

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

如果只有一个%参数,括号可以省略。
使用%s时,它会把任何数据类型转换为字符串。

新式风格

新的格式化方式是使用format()方法实现:

>>> '{} is {}'.format('erick', 100)
'erick is 100'

官方推荐使用新式风格进行格式化。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文