跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python Unicode 处理
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python Unicode处理 = '''Unicode''' 是计算机科学中用于表示和处理文本的国际标准,它几乎涵盖了世界上所有的书写系统。在Python中,字符串默认使用Unicode编码(从Python 3开始),这使得处理多语言文本变得更加简单和一致。本章将详细介绍Python中的Unicode处理,包括编码、解码、常见操作及实际应用。 == Unicode基础 == Unicode为每个字符分配一个唯一的数字(称为'''码点''',code point),范围从<code>U+0000</code>到<code>U+10FFFF</code>。Python使用UTF-8作为默认编码方式,这是一种可变长度的编码方案,可以高效地表示Unicode字符。 === Unicode vs ASCII === ASCII是早期的字符编码标准,仅包含128个字符(如英文字母、数字和标点符号)。Unicode扩展了ASCII,支持更多语言和符号。 <mermaid> flowchart LR A[ASCII: 128字符] --> B[Unicode: 百万字符] B --> C[支持多语言] B --> D[表情符号/特殊符号] </mermaid> == Python中的Unicode字符串 == 在Python 3中,所有字符串都是Unicode字符串。例如: <syntaxhighlight lang="python"> text = "你好,世界! Hello, World! 😊" print(text) </syntaxhighlight> 输出: <pre> 你好,世界! Hello, World! 😊 </pre> === 码点与字符转换 === Python提供了<code>ord()</code>和<code>chr()</code>函数用于字符和码点之间的转换: <syntaxhighlight lang="python"> char = 'A' code_point = ord(char) # 获取Unicode码点 print(f"'{char}'的Unicode码点是: {code_point}") new_char = chr(code_point) # 从码点还原字符 print(f"码点{code_point}对应的字符是: '{new_char}'") </syntaxhighlight> 输出: <pre> 'A'的Unicode码点是: 65 码点65对应的字符是: 'A' </pre> == 编码与解码 == Unicode字符串可以编码为字节序列(如UTF-8),字节序列也可以解码回Unicode字符串。 === 编码(Encode) === 将Unicode字符串转换为字节序列: <syntaxhighlight lang="python"> text = "Python编程" encoded = text.encode('utf-8') # 编码为UTF-8字节 print(encoded) </syntaxhighlight> 输出: <pre> b'Python\xe7\xbc\x96\xe7\xa8\x8b' </pre> === 解码(Decode) === 将字节序列转换回Unicode字符串: <syntaxhighlight lang="python"> decoded = encoded.decode('utf-8') # 解码为Unicode print(decoded) </syntaxhighlight> 输出: <pre> Python编程 </pre> == 常见Unicode操作 == === 字符串长度 === 由于某些Unicode字符(如表情符号)可能由多个码点组成,计算字符串长度时需注意: <syntaxhighlight lang="python"> s = "Hello! 👋" print(len(s)) # 输出: 8(注意:👋占2个码点) </syntaxhighlight> === 规范化(Normalization) === Unicode允许某些字符有多种表示方式(如带重音符号的字母)。使用<code>unicodedata.normalize()</code>可以规范化字符串: <syntaxhighlight lang="python"> import unicodedata s1 = "café" s2 = "cafe\u0301" # 组合字符形式 print(s1 == s2) # 输出: False normalized_s1 = unicodedata.normalize('NFC', s1) normalized_s2 = unicodedata.normalize('NFC', s2) print(normalized_s1 == normalized_s2) # 输出: True </syntaxhighlight> == 实际应用案例 == === 多语言文本处理 === 假设我们需要统计一段包含中文和英文的文本中的字符频率: <syntaxhighlight lang="python"> from collections import defaultdict text = "Python编程 编程Python" freq = defaultdict(int) for char in text: freq[char] += 1 print(freq) </syntaxhighlight> 输出: <pre> defaultdict(<class 'int'>, {'P': 2, 'y': 2, 't': 2, 'h': 2, 'o': 2, 'n': 2, '编': 2, '程': 2, ' ': 1}) </pre> === 处理用户输入 === 在Web应用中,正确处理Unicode用户输入至关重要: <syntaxhighlight lang="python"> user_input = "用户输入:こんにちは" # 确保输入是有效的Unicode try: cleaned = user_input.encode('utf-8').decode('utf-8') except UnicodeError: cleaned = "Invalid input" print(cleaned) </syntaxhighlight> == 常见问题与解决方案 == {| class="wikitable" |+ Unicode常见问题 |- ! 问题 !! 解决方案 |- | '''编码错误'''(UnicodeEncodeError) || 确保使用正确的编码(如UTF-8) |- | '''解码错误'''(UnicodeDecodeError) || 检查字节序列的原始编码 |- | '''显示乱码''' || 确保终端/编辑器支持UTF-8 |} == 数学表示 == Unicode码点可以用十六进制表示: <math> U+XXXX \quad \text{其中} \quad X \in \{0,1,...,9,A,B,...,F\} </math> UTF-8编码规则: <math> \text{对于码点} U \leq 127: \quad 1 \text{字节} \\ 127 < U \leq 2047: \quad 2 \text{字节} \\ 2047 < U \leq 65535: \quad 3 \text{字节} \\ U > 65535: \quad 4 \text{字节} </math> == 总结 == * Python 3字符串默认使用Unicode * 使用<code>encode()</code>/<code>decode()</code>进行编码转换 * 注意多码点字符的处理 * 规范化有助于文本比较 * UTF-8是最常用的Unicode编码方式 通过掌握这些Unicode处理技术,您可以轻松地在Python中处理各种语言的文本数据。 [[Category:编程语言]] [[Category:Python]] [[Category:Python 字符串]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)