news 2026/4/16 10:53:38

Python中encode和decode的用法详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python中encode和decode的用法详解

在Python中,encode()decode()方法是用于字符串(str)和字节(bytes)之间转换的核心方法,主要涉及字符编码的处理。

一、基本概念

编码(Encode)

字符串(str)转换为字节(bytes)

  • 字符串 → 字节

  • 人类可读文本 → 计算机存储/传输格式

解码(Decode)

字节(bytes)转换为字符串(str)

  • 字节 → 字符串

  • 计算机存储/传输格式 → 人类可读文本

二、基本用法

1. encode() 方法

# 基本语法 str.encode(encoding='utf-8', errors='strict') # 示例 text = "你好,世界!" byte_data = text.encode('utf-8') print(byte_data) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81' print(type(byte_data)) # <class 'bytes'>

2. decode() 方法

# 基本语法 bytes.decode(encoding='utf-8', errors='strict') # 示例 byte_data = b'\xe4\xbd\xa0\xe5\xa5\xbd' text = byte_data.decode('utf-8') print(text) # 你好 print(type(text)) # <class 'str'>

3. error参数详解

text = " café " # 包含特殊字符 # 1. strict(默认) - 遇到错误抛出异常 try: text.encode('ascii') # 会失败 except UnicodeEncodeError as e: print(f"错误: {e}") # 2. ignore - 忽略无法编码的字符 result = text.encode('ascii', errors='ignore') print(result) # b' caf ' # 3. replace - 用?替换无法编码的字符 result = text.encode('ascii', errors='replace') print(result) # b' caf? ' # 4. xmlcharrefreplace - 用XML实体替换 result = text.encode('ascii', errors='xmlcharrefreplace') print(result) # b' caf&#233; ' # 5. backslashreplace - 用Unicode转义序列替换 result = text.encode('ascii', errors='backslashreplace') print(result) # b' caf\\xe9 ' # 6. namereplace - 用\N{...}替换 result = text.encode('ascii', errors='namereplace') print(result) # b' caf\\N{LATIN SMALL LETTER E WITH ACUTE} '

4. 文件读写

# 写入文件(编码) with open('test.txt', 'w', encoding='utf-8') as f: f.write("中文内容") # 读取文件(解码) with open('test.txt', 'r', encoding='utf-8') as f: content = f.read() # 二进制模式需要手动编解码 with open('test.txt', 'wb') as f: f.write("中文内容".encode('utf-8')) with open('test.txt', 'rb') as f: content = f.read().decode('utf-8')

5. 网络通信

import socket # 发送数据 data_to_send = "请求数据".encode('utf-8') socket.send(data_to_send) # 接收数据 received_bytes = socket.recv(1024) received_text = received_bytes.decode('utf-8')

6.编解码应该一致

# 错误示例 text = "中文" gbk_bytes = text.encode('gbk') try: wrong_text = gbk_bytes.decode('utf-8') # 解码错误! except UnicodeDecodeError: print("编码不一致导致解码失败") # 正确做法:保持编码一致 correct_text = gbk_bytes.decode('gbk')

最佳实践

  1. 始终明确指定编码,不要依赖默认值

  2. 统一使用UTF-8作为项目标准编码

  3. 尽早解码,晚点编码:在程序内部使用字符串,只在I/O时进行编解码

  4. 处理异常:始终处理可能的编解码异常

  5. 文档说明:在项目文档中明确说明使用的编码

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:28:17

19、VMware 中不同操作系统的使用指南

VMware 中不同操作系统的使用指南 1. Solaris 系统启动与使用 Solaris Intel 平台版通过两步过程启动。首先从 DOS 分区加载一个(DOS)配置助手。若以交互模式进入该助手(首次安装时会这样),可以从替代设备启动并探测新添加的硬件,也能扫描特定硬件,但要注意,若扫描时遗…

作者头像 李华
网站建设 2026/4/10 22:03:39

LeetCode Hot100 —— 子串(面试纯背版)(三)

1、和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2示例 2: 输入:nums = [1,2,3], k = 3 输出:2提示: 1 <= nums.length…

作者头像 李华
网站建设 2026/4/15 10:45:30

apache-maven-3.9.9-src.zip 使用步骤 详细教程

先解压​ 安装包下载&#xff1a;https://pan.quark.cn/s/7d168ac471ab&#xff0c;下载完这个 zip 文件&#xff0c;找个地方解压开&#xff0c;比如放到 D:\tools\maven-src这种目录。解压后你会看到一堆源码文件和文件夹。 装 JDK​ 这个是 Maven 的源码包&#xff0c;要编…

作者头像 李华
网站建设 2026/4/15 5:23:20

12.17 - 合并两个有序数组 include<> 和 include““ 的区别

目录 1.合并两个有序数组 a.核心思想 b.思路 c.步骤 2.include<> 和 include"" 的区别 a.#include<文件名> b.#include"文件名" 1.合并两个有序数组 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn…

作者头像 李华
网站建设 2026/4/10 11:45:23

6、近期量子计算中的多编程机制解析

近期量子计算中的多编程机制解析 1. 量子电路分区算法 在量子计算中,量子电路分区是一个关键环节。这里介绍两种重要的分区算法:GSP 算法和 QHSP 算法。 1.1 GSP 算法复杂度 设硬件量子比特(物理量子比特)数量为 (n),需要分配分区的电路量子比特(逻辑量子比特)数量为…

作者头像 李华
网站建设 2026/4/15 4:02:28

35、Unix与Perl编程:数据检查、求助途径与问题解决

Unix与Perl编程:数据检查、求助途径与问题解决 1. 数据检查的重要性 在处理数据序列时,有些字符绝不能出现在序列中。例如,字符 “X” 不能用来表示核苷酸,“J” 也不对应任何氨基酸。同样,如果下载了对应基因的 DNA 序列,这些序列的编码部分长度应该是三个核苷酸的倍数…

作者头像 李华