Python中级之字符编码

发布时间 2023-12-06 17:40:07作者: Lea4ning

ASKII码

GBK/SHIFT-JIS

UNICODE

字符编码

【一】什么是字符编码

  • 人类在与计算机交互时,用的都是人类能读懂的字符,如中文字符、英文字符、日文字符等
    • 而计算机只能识别二进制数
  • 二进制数即由0和1组成的数字,例如010010101010
  • 计算机是基于电工作的,电的特性即高低电平
  • 人类从逻辑层面将高电平对应为数字1,低电平对应为数字0,这直接决定了计算机可以识别的是由0和1组成的数字
  • 在计算机中,所有的信息都以二进制形式存储,包括文本。而字符编码定义了如何将字符映射到二进制数据。
  • 字符编码就是一种将字符集中的字符映射到数字(编码)的规则或方案
  • 编码是将数据从一种形式(通常是人类可读的形式)转换为另一种形式(通常是计算机可处理的形式)的过程。
  • 解码是将经过编码的数据重新转换回原始形式的过程。在字符编码的上下文中,解码通常是指将二进制数据转换回字符或文本的过程。
  • 在编码和解码的过程中,确保使用相同的字符编码规则是非常重要的,以免产生乱码或错误的解释。

【二】字符编码的发展

  1. ASCII 编码(1963年):
    • 定义: 美国信息交换标准代码(ASCII)是最早的字符编码之一,使用 7 位二进制数表示 128 个字符,包括基本的拉丁字母、数字 0-9、标点符号和一些控制字符。
    • 局限性: ASCII 编码仅包含有限的字符集,适用于英语和部分西欧语言,无法满足全球化需求。
  2. 扩展 ASCII 编码(1980年代初):
    • 定义: 为了满足更多字符需求,一些扩展 ASCII 编码标准(如ISO-8859系列)出现,使用 8 位二进制数,允许表示 256 个字符。
    • 局限性: 扩展 ASCII 依然无法满足全球范围的字符需求,每个国家或地区的字符集不同。
  3. Unicode 标准(1991年):
    • 定义: Unicode 是一个为全球范围内的字符集设计的字符编码标准。它的目标是覆盖世界上所有的语言和符号,并为每个字符分配一个唯一的编码值。
    • 特点: Unicode 使用多字节编码,为不同字符提供了不同的表示。最早的 Unicode 版本使用两个字节,后来扩展到四个字节。Unicode 标准还定义了各种字符的不同表示形式,如 UTF-8、UTF-16 和 UTF-32。
  4. UTF-8 编码(1992年):
    • 定义: 为了解决多字节编码的存储和传输问题,Unicode 引入了 UTF-8 编码方案。UTF-8 使用可变长度的编码,可以根据字符的不同范围选择使用 1 到 4 个字节。
    • 特点: UTF-8 编码在表示英文字符时与 ASCII 兼容,因此在处理英文文本时更为节省空间,同时也支持全球字符集。

字符编码的发展是为了适应全球化的需求,确保能够准确表示和传输不同语言和符号。Unicode 及其不同的编码形式如 UTF-8 在当前广泛应用于各种计算机系统和互联网通信中。

  • ASKII码表
    • 202311182013909

总结:

  • Unicode 是字符集标准,定义了字符的唯一标识符。
  • UTF-8 是 Unicode 的一种具体实现方式,是一种可变长度的字符编码,用于在计算机中存储和传输 Unicode 字符。
  • Unicode 提供了字符的唯一标识,而 UTF-8 提供了字符的具体编码方式。UTF-8 是 Unicode 的一种实现,不同的实现方式还包括 UTF-16、UTF-32 等。

在实践中,UTF-8 是一种常用的字符编码,特别是在 Web 开发和互联网通信中,因为它兼容 ASCII,同时支持全球字符集,使得文本数据的处理更加灵活和高效。

ef90dcfce8036e440018377a3943afa

【三】字符编码的应用

在 Python 中,字符编码的应用场景非常广泛,涵盖了多个领域。以下是一些常见的 Python 中字符编码的应用场景:

  1. 文本处理和文件操作:
    • 在读取或写入文本文件时,需要考虑文件的字符编码,以确保正确地解析和显示文本内容。
    • 使用 Python 内建的 open() 函数时,可以指定文件的编码,例如:open('file.txt', 'r', encoding='utf-8')
  2. 网络通信:
    • 在进行网络通信时,特别是在处理 HTTP 请求和响应时,需要考虑字符编码。HTTP 头中通常包含字符编码信息,以指示文本内容的编码方式。
    • 使用 Python 的网络库(如 requests)时,可以通过检查响应头来确定字符编码,或者使用 response.encoding 进行手动设置。
  3. 数据库操作:
    • 当与数据库交互时,需要注意数据库中存储和检索的文本数据的字符编码。
    • 在使用数据库连接库(如 MySQLdbpsycopg2)时,可以设置连接的字符编码,以确保与数据库的正确交互。
  4. 字符串处理和正则表达式:
    • 在进行字符串处理和正则表达式匹配时,字符编码可能会影响匹配结果。
    • Python 的字符串操作和正则表达式库通常能够处理不同字符编码的文本,但在特定场景下需要格外注意。
  5. Web 开发:
    • 在 Web 开发中,字符编码非常重要,特别是在处理用户输入、数据库交互和页面渲染时。
    • 使用框架(如 Flask、Django)时,通常可以配置字符编码,以适应应用的需求。
  6. 数据处理:
    • 在处理数据文件、CSV 文件等时,字符编码也需要考虑,以确保数据的正确读取和写入。
    • 在使用 pandas 等数据处理库时,通常能够处理不同字符编码的数据。

总体而言,字符编码在 Python 中的应用涵盖了从文本处理到网络通信、数据库操作、字符串处理等多个方面。正确处理字符编码有助于避免乱码问题,确保数据在不同环境中正确地传递和解释。