杰瑞科技汇

Python unicode 如何转 int?

使用 ord() 函数

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

Python unicode 如何转 int?-图1
(图片来源网络,侵删)

语法

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)的区别

这是一个非常重要的概念,初学者很容易混淆。

Python unicode 如何转 int?-图2
(图片来源网络,侵删)
  • 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):

Python unicode 如何转 int?-图3
(图片来源网络,侵删)
# '中' 的 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()

分享:
扫描分享到社交APP
上一篇
下一篇