You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2中如何将Unicode字符转换为代码点?

解决Python2中获取Unicode字符代码点的问题

这问题我之前也踩过坑,核心就是Python2和Python3的字符串模型差异搞的鬼!Python2里字符串分两种:默认的字节串(str类型)和带u前缀的Unicode字符串(unicode类型),而ord()在Python2里只能处理单个ASCII字节,或者单个Unicode码位的字符——你之前的操作没把目标字符转成正确的Unicode类型,所以才会失效。

正确的解决方案

1. 直接用Unicode字符串调用ord()

如果字符是你在代码里直接写的,一定要给字符串加u前缀声明为Unicode类型,之后直接调用ord()就能得到和Python3一样的结果:

# 先确保源文件开头加编码声明,避免字符解析报错
# -*- coding: utf-8 -*-

code_point = ord(u'🎱')
print(code_point)  # 输出 127921

2. 从字节串转换为Unicode字符串后处理

如果你的字符是从外部(比如文件、网络请求)拿到的字节串,得先解码成Unicode字符串,再用ord():

# 假设拿到的是utf-8编码的字节串
byte_str = '🎱'  # Python2里这是utf-8字节串,长度为4
unicode_str = byte_str.decode('utf-8')
code_point = ord(unicode_str)
print(code_point)  # 输出 127921

为什么你之前的尝试无效?

  • '🎱'.encode('utf8'):在Python2里,'🎱'本身已经是utf-8编码的字节串(str类型),字节串只能调用decode()转成Unicode,而encode()是Unicode字符串的专属方法——直接调用会触发Python2的默认行为:先把字节串按ASCII解码,这肯定会报错。
  • '🎱'.encode('hex'):同样的逻辑,字节串不能直接encode,而且就算强行转成hex,得到的是字节的十六进制值(比如🎱的utf-8字节hex是f09f8eb1),这和Unicode码位完全不是一回事。

额外注意事项

  • 源文件开头必须加# -*- coding: utf-8 -*-,不然Python2会用默认的ASCII编码读取文件,导致u'🎱'这类字符直接解析失败。
  • 如果处理多字符的Unicode字符串,Python2的unicode类型迭代出来的是单个码位,和Python3的str一致,遍历的时候可以逐个用ord()获取码位。

内容的提问来源于stack exchange,提问作者esfy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:34