字符编解码及其相互转换

1. 获取或设置默认编解码

在 Python 中,默认编码类型是由解释器在启动时自动设置的,并且在运行过程中不可更改。但你可以在代码中显式地指定和使用特定的编码类型来处理字符串。通过设置文件头的注释添加以下内容,可以告诉解释器源代码文件的编码类型:

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

上面的示例指定了文件的编码类型为 UTF-8。

在读取和写入文件时,你可以使用 open() 函数提供的 encoding 参数来指定所需的编码类型:

1 # 以 UTF-8 编码方式读取文件
2 with open('file.txt', 'r', encoding='utf-8') as file:
3     content = file.read()
4 
5 # 以 UTF-8 编码方式写入文件
6 with open('file.txt', 'w', encoding='utf-8') as file:
7     file.write(content)

如果你需要处理标准输入、输出或错误流,可以使用 sys 模块来设置它们的编码方式:

复制代码
 1 import sys
 2 
 3 # 设置标准输出编码方式为 UTF-8
 4 sys.stdout.encoding = 'utf-8'
 5 
 6 # 设置标准输入编码方式为 UTF-8
 7 sys.stdin.encoding = 'utf-8'
 8 
 9 # 设置标准错误输出编码方式为 UTF-8
10 sys.stderr.encoding = 'utf-8'
复制代码

请注意,对于其他库和组件,可能有专门的方法来设置和管理编码类型。例如,在处理网络请求时,可以使用 requests 库中的 response.encoding 属性来指定响应内容的编码类型。

 

在 Python 中,你可以使用 sys 模块来获取默认的编码类型。通过访问 sys 模块的 getdefaultencoding() 函数,你可以获取当前 Python 解释器的默认编码。下面是示例代码:

import sys

default_encoding = sys.getdefaultencoding()
print(default_encoding)  # 输出默认的编码类型,如 'utf-8'

在上面的代码中,我们导入了 sys 模块,并使用 getdefaultencoding() 函数获取默认的编码类型。将默认编码类型赋值给变量 default_encoding,然后打印该变量的值即可。

需要注意的是,默认的编码类型可能因不同的操作系统和 Python 版本而有所不同。通常情况下,Python 3 的默认编码是 'utf-8'。如果你需要在你的代码中处理文本,最好明确指定编码方式,以避免出现意外的编码问题。

 

2. 编解码相互转换

字符串之间的转换可以使用 Python 的内置函数和方法来实现。下面是关于 ASCII、Unicode、UTF-8 和二进制之间转换的详细解释:

  1. ASCII 和 Unicode 之间的转换:

    • 将 ASCII 字符串转换为 Unicode 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型作为参数。例如,将 ASCII 字符串转换为 Unicode 字符串可以使用 encode('unicode_escape') 方法。
    • 将 Unicode 字符串转换为 ASCII 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii'。注意,如果字符串中包含非 ASCII 字符,转换将会失败,这时需要处理编码错误。
    • 将 Unicode 字符串转换为 ASCII 字符串并忽略非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'ignore'。这样会忽略字符串中的非 ASCII 字符。
    • 将 Unicode 字符串转换为 ASCII 字符串并替换非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'replace'。这样会将非 ASCII 字符替换为 '?'。
    • 将 Unicode 字符串转换为 ASCII 字符串并使用 XML 实体替换非 ASCII 字符:使用 str 类型的 encode() 方法,并指定目标编码类型为 'ascii',并设置 errors 参数为 'xmlcharrefreplace'。这样会将非 ASCII 字符替换为相应的 XML 实体。
  2. Unicode 和 UTF-8 之间的转换:

    • 将 Unicode 字符串转换为 UTF-8 字符串:使用 str 类型的 encode() 方法,并指定目标编码类型为 'utf-8'。
    • 将 UTF-8 字符串转换为 Unicode 字符串:使用 bytes 类型的 decode() 方法,并指定源编码类型为 'utf-8'。
  3. 字符串和二进制之间的转换:

    • 将字符串转换为二进制:使用 bytes 类型的 encode() 方法,并指定目标编码类型。例如,将字符串转换为 UTF-8 编码的二进制可以使用 encode('utf-8') 方法。
    • 将二进制转换为字符串:使用 bytes 类型的 decode() 方法,并指定源编码类型。
      复制代码
       1 示例:演示了 ASCII、Unicode、UTF-8 和二进制之间的相互转换
       2 
       3 # ASCII 转换为 Unicode
       4 ascii_string = 'Hello'
       5 unicode_string = ascii_string.encode('unicode_escape').decode('unicode_escape')
       6 print(unicode_string)  # 输出 'Hello'
       7 
       8 # Unicode 转换为 ASCII
       9 unicode_string = 'Hello'
      10 ascii_string = unicode_string.encode('ascii', errors='ignore').decode('ascii')
      11 print(ascii_string)  # 输出 'Hello'
      12 
      13 # Unicode 转换为 UTF-8
      14 unicode_string = '你好'
      15 utf8_string = unicode_string.encode('utf-8')
      16 print(utf8_string)  # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd'
      17 
      18 # UTF-8 转换为 Unicode
      19 utf8_string = b'\xe4\xbd\xa0\xe5\xa5\xbd'
      20 unicode_string = utf8_string.decode('utf-8')
      21 print(unicode_string)  # 输出 '你好'
      22 
      23 # 字符串转换为二进制
      24 string = 'Hello'
      25 binary = string.encode('utf-8')
      26 print(binary)  # 输出 b'Hello'
      27 
      28 # 二进制转换为字符串
      29 binary = b'Hello'
      30 string = binary.decode('utf-8')
      31 print(string)  # 输出 'Hello'
      32 
      33 # ASCII 转换为 Unicode   指定编码类型:先编码后解码
      34 ascii_string = 'Hello'
      35 unicode_string = ascii_string.encode('unicode_escape').decode('unicode_escape')
      36 print(unicode_string)  # 输出 'Hello'
      37 
      38 # Unicode 转换为 ASCII
      39 unicode_string = 'Hello'
      40 ascii_string = unicode_string.encode('ascii', errors='ignore').decode('ascii')
      41 print(ascii_string)  # 输出 'Hello'
      42 
      43 # Unicode 转换为 UTF-8
      44 unicode_string = '你好'
      45 utf8_string = unicode_string.encode('utf-8')
      46 print(utf8_string)  # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd'
      47 
      48 # UTF-8 转换为 Unicode
      49 utf8_string = b'\xe4\xbd\xa0\xe5\xa5\xbd'
      50 unicode_string = utf8_string.decode('utf-8')
      51 print(unicode_string)  # 输出 '你好'
      52 
      53 # 字符串转换为二进制:只编码,不解码就是二进制了
      54 string = 'Hello'
      55 binary = string.encode('utf-8')
      56 print(binary)  # 输出 b'Hello'
      57 
      58 # 二进制转换为字符串
      59 binary = b'Hello'
      60 string = binary.decode('utf-8')
      61 print(string)  # 输出 'Hello'
      复制代码

       

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