使用 ord() 函数
这是最直接、最标准的方法,Python 内置的 ord() 函数专门用于接收一个 Unicode 字符(长度为 1 的字符串),并返回它对应的整数 Unicode 码位。

语法
ord('一个字符')
示例
# 示例 1:英文字符
char_a = 'A'
code_point_a = ord(char_a)
print(f"字符 '{char_a}' 的 Unicode 码位是: {code_point_a}")
# 输出: 字符 'A' 的 Unicode 码位是: 65
# 示例 2:中文字符
char_zh = '中'
code_point_zh = ord(char_zh)
print(f"字符 '{char_zh}' 的 Unicode 码位是: {code_point_zh}")
# 输出: 字符 '中' 的 Unicode 码位是: 20013
# 示例 3:特殊符号
char_emoji = '😊'
code_point_emoji = ord(char_emoji)
print(f"字符 '{char_emoji}' 的 Unicode 码位是: {code_point_emoji}")
# 输出: 字符 '😊' 的 Unicode 码位是: 128522
逆向操作:int 转 Unicode (chr() 函数)
与 ord() 相对的是 chr() 函数,它接收一个整数(合法的 Unicode 码位),并返回对应的字符。
语法
chr(一个整数)
示例
# 将整数转换回字符
int_val = 65
char_from_int = chr(int_val)
print(f"整数 {int_val} 对应的字符是: '{char_from_int}'")
# 输出: 整数 65 对应的字符是: 'A'
int_val_zh = 20013
char_from_int_zh = chr(int_val_zh)
print(f"整数 {int_val_zh} 对应的字符是: '{char_from_int_zh}'")
# 输出: 整数 20013 对应的字符是: '中'
常见误区与注意事项
ord() 的参数必须是单个字符
如果你尝试将一个包含多个字符的字符串传给 ord(),Python 会抛出 TypeError。
# 错误示例
try:
ord("hello") # "hello" 是一个长度为 5 的字符串,不是单个字符
except TypeError as e:
print(f"错误: {e}")
# 输出: 错误: ord() expected a character, but string of length 5 found
如果你需要处理一个字符串中的所有字符,应该使用循环:
my_string = "你好"
for char in my_string:
print(f"字符 '{char}' 的码位是: {ord(char)}")
# 输出:
# 字符 '你' 的码位是: 20320
# 字符 '好' 的码位是: 22909
Unicode 码位与编码(如 UTF-8)的区别
这是一个非常重要的概念,初学者很容易混淆。

-
Unicode 码位:是一个整数,是字符在 Unicode 字符集中的唯一编号。'A' 的码位是
U+0041(十进制 65)。ord('A')返回的就是这个整数65。 -
编码 (Encoding):是一种规则,用于将 Unicode 码位(整数)转换成计算机可以存储和传输的字节序列。
- UTF-8 是最常用的编码规则,它会用 1 到 4 个不定的字节来表示一个字符。
- 字符 'A' (码位 65) 在 UTF-8 中编码后是
b'\x41'(1 个字节)。 - 字符 '中' (码位 20013) 在 UTF-8 中编码后是
b'\xe4\xb8\xad'(3 个字节)。
ord() 只负责第一步:字符 -> Unicode 码位 (整数)。
如果你需要从字节序列得到码位,需要先解码(decode):

# '中' 的 UTF-8 编码字节
bytes_zh = '中'.encode('utf-8') # 或者直接写 b'\xe4\xb8\xad'
print(f"'中' 的 UTF-8 编码字节: {bytes_zh}")
# 从字节解码回字符串,再用 ord() 获取码位
decoded_char = bytes_zh.decode('utf-8')
code_point = ord(decoded_char)
print(f"从字节解码后得到的字符: '{decoded_char}'")
print(f"该字符的 Unicode 码位: {code_point}")
# 输出:
# '中' 的 UTF-8 编码字节: b'\xe4\xb8\xad'
# 从字节解码后得到的字符: '中'
# 该字符的 Unicode 码位: 20013
| 操作 | 函数 | 输入 | 输出 | 示例 |
|---|---|---|---|---|
| 字符 -> Unicode 码位 (整数) | ord() |
单个字符的字符串 | 整数 | ord('A') -> 65 |
| Unicode 码位 (整数) -> 字符 | chr() |
整数 | 单个字符的字符串 | chr(65) -> 'A' |
| 字符 -> 字节序列 (编码) | .encode() |
字符串 | 字节对象 | '中'.encode('utf-8') -> b'\xe4\xb8\xad' |
| 字节序列 -> 字符 (解码) | .decode() |
字节对象 | 字符串 | b'\xe4\xb8\xad'.decode('utf-8') -> '中' |
对于你的问题“python unicode 转 int”,答案就是使用内置函数 ord()。
