跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 字符串编码
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python字符串编码 = == 简介 == '''Python字符串编码'''是处理文本数据时的核心概念,指将字符(如字母、数字、符号)转换为计算机可存储或传输的二进制数据的过程。Python 3默认使用'''UTF-8'''编码,支持全球多语言字符集。理解编码机制对文件读写、网络通信和数据持久化至关重要。 == 编码基础 == === 字符与字节 === * '''字符'''是人类可读的文本单位(如"A"、"中")。 * '''字节'''是计算机存储的基本单位(8位二进制,范围0-255)。 * 编码是将字符映射为字节序列的规则(如ASCII、UTF-8)。 === 常见编码标准 === {| class="wikitable" |+ 主要编码标准对比 ! 编码 !! 描述 !! 支持字符范围 |- | ASCII || 7位编码,共128字符 || 英文、数字、基础符号 |- | UTF-8 || 变长编码(1-4字节) || 全Unicode字符集 |- | GBK || 汉字扩展编码 || 简体中文、部分符号 |} == Python中的编码操作 == === 字符串与字节串转换 === Python使用<code>encode()</code>和<code>decode()</code>方法实现转换: <syntaxhighlight lang="python"> # 字符串 → 字节串 text = "Python字符串" byte_data = text.encode('utf-8') # 指定UTF-8编码 print(byte_data) # 输出: b'Python\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2' # 字节串 → 字符串 decoded_text = byte_data.decode('utf-8') print(decoded_text) # 输出: "Python字符串" </syntaxhighlight> === 编码错误处理 === 当遇到无法转换的字符时,可通过<code>errors</code>参数指定处理方式: <syntaxhighlight lang="python"> text = " café" # 包含特殊空格 try: byte_data = text.encode('ascii', errors='ignore') # 忽略错误字符 print(byte_data) # 输出: b' caf' except UnicodeEncodeError as e: print(f"编码错误: {e}") </syntaxhighlight> 常用错误处理模式: * <code>strict</code>(默认):抛出UnicodeError * <code>ignore</code>:跳过非法字符 * <code>replace</code>:用问号替代 == 实际应用案例 == === 案例1:读取不同编码文件 === <syntaxhighlight lang="python"> # 读取GBK编码的文本文件 with open('data.txt', 'r', encoding='gbk') as f: content = f.read() print(content) </syntaxhighlight> === 案例2:网络数据传输 === <syntaxhighlight lang="python"> import urllib.request # 从URL获取UTF-8编码数据 response = urllib.request.urlopen("http://example.com/data.json") byte_data = response.read() text = byte_data.decode('utf-8') print(text) </syntaxhighlight> == 编码原理图解 == <mermaid> graph LR A[字符"中"] -->|Unicode码点 U+4E2D| B(编码) B -->|UTF-8: 0xE4 0xB8 0xAD| C[字节序列] C -->|解码| A </mermaid> == 数学表示 == UTF-8编码规则可用数学分段函数表示: <math> UTF8(x) = \begin{cases} x & \text{如果 } x \leq 127 \\ (x \gg 6) \lor 0xC0, (x \land 0x3F) \lor 0x80 & \text{如果 } x \leq 2047 \\ (x \gg 12) \lor 0xE0, ((x \gg 6) \land 0x3F) \lor 0x80, (x \land 0x3F) \lor 0x80 & \text{如果 } x \leq 65535 \\ \end{cases} </math> == 高级话题 == === BOM(字节顺序标记) === UTF-16/32可能在文件开头添加BOM(如<code>0xFEFF</code>),Python可通过<code>encoding='utf-8-sig'</code>自动处理。 === 编码检测 === 使用<code>chardet</code>库自动检测未知编码: <syntaxhighlight lang="python"> import chardet rawdata = open('unknown.txt', 'rb').read() result = chardet.detect(rawdata) print(result) # 输出: {'encoding': 'GB2312', 'confidence': 0.99} </syntaxhighlight> == 常见问题 == '''Q:为什么会出现<code>UnicodeDecodeError</code>?''' A:当尝试用错误编码解码字节串时发生,例如用ASCII解码中文文本。 '''Q:如何选择编码?''' * 跨平台/网络通信:优先使用UTF-8 * 中文Windows环境:可能需要GBK == 总结 == Python字符串编码是国际化和本地化开发的基础。关键要点: 1. 明确区分字符串(str)和字节串(bytes) 2. 读写文件/网络数据时显式指定编码 3. 处理未知编码时使用检测工具 4. UTF-8是现代应用的推荐标准 [[Category:编程语言]] [[Category:Python]] [[Category:Python 字符串]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)