字符编解码

什么是字符编码 & 解码

字符编码

字符编码是将字符转换为二进制表示的过程。它是为了能够在计算机系统中处理和存储文本而创建的一种方式。由于计算机只能理解二进制数据,需要将字符转换为相应的二进制编码形式才能进行处理。

字符解码

字符解码是将二进制数据转换回字符的过程。它是将存储在计算机中的二进制数据转换为可读的字符形式。解码将二进制数据重新映射到对应的字符,使得人类可以理解和处理这些字符。

总结

Python 使用 Unicode 字符编码作为内部表示,这使得它可以处理多种语言和字符集。

在 Python 中,字符编码和解码是通过字符串对象的编码和解码方法实现的:

  • 编码:在字符串对象上调用 encode() 方法将字符串编码为指定的编码类型。它接受一个参数,即目标编码。例如,str.encode(encoding)
  • 解码:在字节对象上调用 decode() 方法将字节解码为字符串。它接受一个参数,即源编码类型。例如,bytes.decode(encoding)

例如,如果要将字符串编码为 UTF-8 编码的字节序列,可以使用以下方式:

1 # 1. 编码
2 text = "Hello, 你好"
3 encoded_text = text.encode("UTF-8")
4 print(encoded_text)  # b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd'

字符串对象 text 被编码为 UTF-8 编码的字节序列,并通过 encode() 方法进行了转换。

1 # 2. 解码
2 bytes_text = b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd'
3 decoded_text = bytes_text.decode("UTF-8")
4 print(decoded_text)  # Hello, 你好

在示例中,字节对象 bytes_text 被解码为 UTF-8 编码的字符串,并通过 decode() 方法进行了转换。

总之:字符编码是将字符转换为二进制表示的过程,而字符解码是将二进制数据转回字符的过程。Python 提供了编码和解码方法,以便处理和转换字符与字节之间的转换。

字符编码的类型

 

ASCII 

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种最早的字符编码标准,通过使用 7 位二进制(2的7次方即128,范围:0-127)表示来表示常用的字符。

在 Python 中,内置函数 ord() 可以用来获取一个字符的 ASCII 值,而 chr() 可以用来将 ASCII 值转换为字符。

以下是关于 ASCII 编码的最佳实践和示例:

1. ASCII 范围:ASCII 编码涵盖了 0 到 127 的范围,其中包含了常用的英文字母、数字和一些特殊字符。超出这个范围的字符需要使用其他编码(如 Unicode)来表示。          

ASCII 编码的范围是从 0 到 127。这个范围包含了许多常用的英文字母、数字、标点符号和一些控制字符。

    下面是 ASCII 编码范围的几个子集:

      • 0-31:控制字符,如换行符、回车符、制表符等。
      • 32-47:特殊字符,如空格、斜杠、句点等。
      • 48-57:十进制数字 0-9。
      • 65-90:大写字母 A-Z。
      • 97-122:小写字母 a-z。
      • 91-96:其他特殊字符,如方括号、反引号等。
      • 123-127:其他特殊字符,如大括号、竖线、波浪符等。

2. ASCII 转换:要将一个字符转换为 ASCII 值,可以使用内置函数 ord()。  

1 char = 'A'
2 ascii_value = ord(char)
3 print(ascii_value)  # 65

在这个示例中,字符 'A' 被转换为相应的 ASCII 值,即 65

 

3. ASCII 转换:要将一个 ASCII 值转换为字符,可以使用 chr() 函数。

1 ascii_value = 65
2 char = chr(ascii_value)
3 print(char)  # A

在这个示例中,ASCII 值 65 被转换回相应的字符 'A'。

 

Unicode 

Unicode 是一种字符编码标准,包含了几乎所有世界上使用的字符,无论是常见字符还是罕见字符。Unicode 使用更多的位数来表示字符,从而可以表示更多的字符。

Unicode 编码的总结、最佳实践和示例:

  1. Unicode 编码范围:Unicode 编码的范围很大,它的编码空间可以容纳约 1.1 百万个字符。每个字符在 Unicode 中都被分配了一个唯一的码点(code point),用来表示该字符。

  2. Unicode 转换:在 Python 中,可以使用 ord() 函数获取一个字符的 Unicode 码点,使用 chr() 函数将 Unicode 码点转换为字符。

   

1 char = '🐼'
2 unicode_point = ord(char)
3 print(unicode_point)  # 128060

在这个示例中,字符 '🐼' 被转换为相应的 Unicode 码点 128060。

  3. Unicode 转换:要将一个 Unicode 码点转换为字符,可以使用 chr() 函数 

1 unicode_point = 128060
2 char = chr(unicode_point)
3 print(char)  # 🐼

在这个示例中,Unicode 码点 128060 被转换回相应的字符 '🐼'。

最佳实践是在需要处理包含非 ASCII 字符的情况下使用 Unicode 编码。Unicode 能够表示世界上几乎所有的字符,包括各种语言的文字、符号、表情符号等。当处理字符串时,可以使用 Python 的字符串类型 str(默认为 Unicode 字符串类型)来确保正确地处理非 ASCII 字符。

总之,Unicode 是一种字符编码标准,可以表示几乎所有世界上使用的字符。在 Python 中,可以使用 ord() 和 chr() 函数将字符转换为 Unicode 码点和将 Unicode 码点转换为字符。最佳实践是在需要处理非 ASCII 字符的情况下使用 Unicode 编码,并使用 Python 的字符串类型 str 来确保正确地处理这些字符。

 

在字符串中,可以直接使用 Unicode 码点来表示字符,也可以使用转义序列表示 Unicode 字符,形式为 \uXXXX 或 \UXXXXXXXX,其中 X 表示十六进制数字。

复制代码
 1 # Unicode 字符转换为码点
 2 ch = 'A'
 3 code_point = ord(ch)
 4 print(code_point)  # 65
 5 
 6 # 码点转换回 Unicode 字符
 7 ch = chr(code_point)
 8 print(ch)  # A
 9 
10 # 转义序列转换为 Unicode 字符
11 escape_sequence = '\\u0068\\u0065\\u006c\\u006c\\u006f'
12 unicode_str = bytes(escape_sequence, encoding='utf-8').decode('unicode_escape')
13 print(unicode_str)  # hello
14 
15 # Unicode 字符转换为转义序列
16 unicode_str = '你好'
17 escape_sequence = unicode_str.encode('unicode_escape').decode()
18 print(escape_sequence)  # \\u4f60\\u597d
复制代码

上述代码演示了如何将 Unicode 字符转换为码点,以及将码点转换回 Unicode 字符。接下来的示例展示了如何将转义序列转换为 Unicode 字符,以及如何将 Unicode 字符转换为转义序列。

请注意,在将转义序列转换为 Unicode 字符时,你需要使用 unicode_escape 解码器进行解码。而在将 Unicode 字符转换为转义序列时,你可以使用 unicode_escape 编码器进行编码。

这些函数和方法可以帮助你在 Unicode 字符和转义序列之间进行相互转换。

UTF-8

UTF-8 是一种用于编码 Unicode 字符的可变长度编码方案。在 Python 中,UTF-8 是默认的字符编码方式。以下是关于 UTF-8 的总结、最佳实践以及示例:

  1. UTF-8 总结:UTF-8 使用 8 位字节来编码字符,具有良好的兼容性和可变长编码的特性。它能够表示所有的 Unicode 字符,并且在 ASCII 字符范围内只使用一个字节,非 ASCII 字符使用多个字节表示。

  2. 最佳实践:

    • 在处理文本时,始终使用 UTF-8 编码,以确保能够处理各种特殊字符和多语言文本。
    • 在打开文件时,指定 encoding='utf-8' 参数,以确保正确地解码文件中的 UTF-8 编码文本。
  3. 示例代码:

    复制代码
    # UTF-8 编码与解码示例
    string = '你好,世界!'
    
    # 编码为 UTF-8 字节序列,encode方法其实干了2件事:1, 把字符串变成字节,2,把字节用utf-8进行编码,得到utf-8字节序列
    encoded_bytes = string.encode('utf-8')
    print(encoded_bytes)  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
    
    # 将 UTF-8 字节序列解码为字符串
    decoded_string = encoded_bytes.decode('utf-8')
    print(decoded_string)  # 你好,世界!
    复制代码

     

在上述示例中,我们将字符串使用 UTF-8 编码成字节序列,并将字节序列解码回字符串。通过指定 'utf-8' 编码参数来进行编码和解码。

总之,UTF-8 是一种用于编码 Unicode 字符的可变长度编码方案。在 Python 中,我们应该使用 UTF-8 编码来处理文本,并指定 encoding='utf-8' 来正确地编码和解码文本数据。

 

最佳实践

  1. 字符编码的类型:

    • ASCII:ASCII 是最基本的字符编码,它包含了英文字母、数字和一些特殊字符。ASCII 编码只使用 7 位表示字符,默认情况下可以在 Python 中直接使用。
    • Unicode:Unicode 是一个标准,它定义了几乎所有字符的唯一标识符。Python 3.x 默认使用 Unicode 编码,即字符串是以 Unicode 形式存储的。
    • UTF-8:UTF-8 是一种变长的编码,能够有效地表示 Unicode 字符集。在 Python 中,字符串对象可以在不同的编码和解码方式之间进行转换。UTF-8 是最常用的编码之一。
  2. Python 字符编码的最佳实践:

    • 在 Python 3.x 中,始终使用 Unicode 字符串来处理和存储文本。这样能够确保能够处理各种不同的字符集和语言。
    • 在读取或写入文件时,使用正确的编码进行操作。如果未指定编码,默认情况下会使用系统的默认编码。可以通过在文件操作时指定 encoding 参数来显式指定编码类型。
    • 当从外部源获取文本(例如 Web)时,始终指定编码。
    • 在字符串和字节之间进行转换时,使用适当的编码和解码函数(例如 encode() 和 decode())。
复制代码
 1 # 字符串编码为字节
 2 text = "你好"
 3 encoded_text = text.encode("UTF-8")
 4 print(encoded_text)  # 输出: b'\xe4\xbd\xa0\xe5\xa5\xbd'
 5 
 6 # 字节解码为字符串
 7 decoded_text = encoded_text.decode("UTF-8")
 8 print(decoded_text)  # 输出: 你好
 9 
10 # 在读写文件时指定编码
11 with open("file.txt", "w", encoding="UTF-8") as file:
12     file.write("你好")
13 
14 with open("file.txt", "r", encoding="UTF-8") as file:
15     content = file.read()
16 
17 print(content)  # 输出: 你好
复制代码

在这个示例中,我们将字符串 "你好" 用 UTF-8 编码为字节串,并将其解码回字符串。然后,我们将字符串写入文件并使用相同的编码读取文件内容。

要注意的是,编码和解码时需要使用正确的编码类型。错误的编解码方式可能会导致字符显示错误,或者抛出异常。因此,在进行编码和解码时要确保使用正确的编码方式。

从外部源获取文本时,始终指定编码是一个重要的最佳实践,以确保正确解码和处理文本数据。以下是关于在 Python 中从外部源获取文本时指定编码的最佳实践和示例:

  1. 指定相应的编码类型:查看外部源(例如网页、API 响应)提供的文本编码信息,并在使用该文本之前,显式地指定正确的编码类型。这可以通过检查 HTTP 响应头中的 Content-Type 头部来获取编码信息。

  2. 使用模块的内置功能:Python 提供了多种用于处理外部源文本编码的模块和方法。常用的有 requestsurllib 和 chardet 等。

以下是一个具体示例,演示如何使用 requests 模块从网页中获取文本,并指定正确的编码:

复制代码
 1 import requests
 2 
 3 url = "https://example.com"  # 假设这是一个外部网页
 4 
 5 response = requests.get(url)
 6 encoding = response.encoding  # 获取响应的编码
 7 
 8 # 显式地指定编码类型
 9 response.encoding = "UTF-8"
10 
11 text = response.text
12 print(text)
复制代码

在这个示例中,我们使用 requests 模块请求一个 URL,并使用 response.encoding 获取编码信息。然后,我们显式地将编码设置为 "UTF-8",以确保响应的正确解码。最后,我们使用 response.text 获取解码后的文本数据。

 

posted @   Allen_Hao  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示