Ale*_*x G 2 python unicode python-3.x
我正在尝试获取外语文本并输出人类可读的文件名安全等价物。环顾四周后,似乎最好的选择是unicodedata.normalize(),但我无法让它工作。我试过把一些答案中的确切代码放在这里和其他地方,但它一直给我这个错误。当我运行时,我只获得了一次成功:
unicodedata.normalize('NFD', '\u00C7')
'C\u0327'
Run Code Online (Sandbox Code Playgroud)
但每隔一段时间,我都会收到一个错误。这是我尝试过的代码:
unicodedata.normalize('NFKD', u'\u2460') #error, not sure why. Look same as above.
s = '??? ?????'
unicodedata.normalize('NKFC',s) #error
unicodedata.normalize('NKFD', 'ñ') #error
Run Code Online (Sandbox Code Playgroud)
具体来说,我得到的错误是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid normalization form
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这不起作用。所有这些都是字符串,这意味着它们在 Python 3 中是 unicode。我尝试使用 对它们进行编码.encode(),但后来normalize()说它只需要字符串参数,所以我知道那不可能。我真的很茫然,因为即使是我从这里复制的代码似乎也出错了。这里发生了什么?
查看unicodedata.c,获得该错误的唯一方法是输入无效的表单字符串。有效值为“NFC”、“NFKC”、“NFD”和“NFKD”,但您似乎在使用“F”和“K”切换的值:
>>> import unicodedata
>>>
>>> unicodedata.normalize('NKFD', 'ñ')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid normalization form
>>>
>>> unicodedata.normalize('NFKD', 'ñ')
'n?'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1752 次 |
| 最近记录: |