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

Python中ord()处理非ASCII字符报错,如何获取Latin-1字符十进制值?

获取Latin-1字符的十进制值(如é的233)

这个问题的核心在于Python中字符串的Unicode编码特性,以及ord()函数的输入要求,让我一步步拆解解决方法:

为什么ord('é')会报错?

你遇到的TypeError说明你输入的'é'其实是两个Unicode字符的组合体——也就是分解形式:基础字符'e'(U+0065)加上组合重音符号'́'(U+0301)。这种情况下字符串长度为2,而ord()只接受单个Unicode字符,自然会抛出错误。

解决方法

1. 先归一化字符到预组合形式

如果你的字符是分解形式,先用unicodedata.normalize()转换成预组合的单个字符,再调用ord():

import unicodedata

# 处理分解形式的é(实际是两个字符的组合)
decomposed_e = 'é'
normalized_e = unicodedata.normalize('NFC', decomposed_e)
print(len(normalized_e))  # 输出1,确认是单个字符
print(ord(normalized_e))  # 输出233,完全匹配Latin-1的数值

2. 直接编码为Latin-1字节再转整数

Latin-1(ISO-8859-1)的每个字符对应一个字节,所以可以将预组合的字符编码为Latin-1字节串,再对字节调用ord():

# 假设已拿到预组合的é
print(ord('é'.encode('latin-1')))  # 输出233

3. 直接调用ord()(适用于预组合字符)

如果你的字符是预组合的é(Unicode码点U+00E9),它的码点值正好等于Latin-1对应的十进制值,直接用ord()即可:

print(ord('é'))  # 输出233,前提是该字符为单个预组合字符

关键知识点

  • Latin-1(ISO-8859-1)覆盖了Unicode的U+0000到U+00FF范围,这个区间内的预组合Unicode字符,ord()返回的值就是Latin-1对应的十进制值。
  • Unicode对带重音的字符有两种表示方式:预组合(单个码点)和分解(基础字符+组合符号),处理前做归一化可以避免长度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:40