Python在变量名中使用时不区分某些unicode字符 问题
在编写Python3代码时,我在变量名中使用Unicode文本,这让我感到很高兴。今天我遇到了一个奇怪的bug,这是由于Python没有区分变量Python在变量名中使用时不区分某些unicode字符 问题,python,python-3.x,unicode,python-unicode,Python,Python 3.x,Unicode,Python Unicode,在编写Python3代码时,我在变量名中使用Unicode文本,这让我感到很高兴。今天我遇到了一个奇怪的bug,这是由于Python没有区分变量ρ和ϱ,正如下面的简短代码所示: ρ = 'hello' ϱ = 'goodbye' print(ρ) # Prints 'goodbye' 这是一个bug还是一个特性?对于后者,我如何/在哪里找到以这种方式属于一起的所有此类字符集 进一步探索 在字符串中使用ρ和ϱ时,不存在这种差异: a = 'ρ' b = 'ϱ' print(a == b) #
ρ
和ϱ
,正如下面的简短代码所示:
ρ = 'hello'
ϱ = 'goodbye'
print(ρ) # Prints 'goodbye'
这是一个bug还是一个特性?对于后者,我如何/在哪里找到以这种方式属于一起的所有此类字符集
进一步探索
在字符串中使用ρ
和ϱ
时,不存在这种差异:
a = 'ρ'
b = 'ϱ'
print(a == b) # Prints False
这使我确信这不是我的编辑器/终端的编码问题
我们还可以使用unicodedata
模块确认Python完全清楚我们正在处理哪些字符:
import unicodedata
print(unicodedata.name('ρ')) # Prints 'GREEK SMALL LETTER RHO'
print(unicodedata.name('ϱ')) # Prints 'GREEK RHO SYMBOL'
我发现这对φ(希腊字母PHI)和φ(希腊字母PHI)之间的行为相同
解析时将所有标识符转换为标准格式NFKC;标识符的比较基于NFKC
>>> unicodedata.normalize('NFKC', 'ρϱ')
'ρρ'