2016-03-31 62 views
1

我試圖把外語文本和輸出一個人類可讀,文件名安全的等價物。環顧四周後,似乎最好的選擇是unicodedata.normalize(),但我無法實現。我已經嘗試從一些答案在這裏和其他地方的確切代碼,但它不斷給我這個錯誤。我只有一次成功,當我跑時:Unicodedata.normalize()ValueError:無效的規範化形式

unicodedata.normalize('NFD', '\u00C7') 
'C\u0327' 

但是每隔一段時間,我都會遇到一個錯誤。這裏是我的代碼,我已經試過:

unicodedata.normalize('NFKD', u'\u2460') #error, not sure why. Look same as above. 
s = 'ذهب الرجل' 
unicodedata.normalize('NKFC',s) #error 
unicodedata.normalize('NKFD', 'ñ') #error 

具體來說,我得到的錯誤是:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid normalization form 

我不明白爲什麼這是行不通的。所有這些都是字符串,這意味着它們在Python 3中是unicode。我嘗試使用.encode()對它們進行編碼,但normalize()表示它只接受字符串參數,所以我知道不能這樣做。我真的很茫然,因爲即使我從這裏複製的代碼似乎錯誤了。這裏發生了什麼?

回答

3

看着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', 'ñ') 
'ñ' 
+0

謝謝你,我我以爲我試過那個...... –