我有一些IDNA編碼的字符串,我無法解碼。在Python中,我嘗試u"xn--grohandel-shop-2fb".decode("idna")
並得到錯誤「IDNA不往返」。 "xn--sottmqqo5-lgbe9b7no0hmz9u"
相同。IDNA不會往返
我很難過,並且用Google搜索錯誤根本沒有幫助。
我有一些IDNA編碼的字符串,我無法解碼。在Python中,我嘗試u"xn--grohandel-shop-2fb".decode("idna")
並得到錯誤「IDNA不往返」。 "xn--sottmqqo5-lgbe9b7no0hmz9u"
相同。IDNA不會往返
我很難過,並且用Google搜索錯誤根本沒有幫助。
錯誤「IDNA不會往返」意味着模塊在對字符串進行解碼和編碼時會得到不同的結果。
通過查看針對Python的IDNA模塊的source code,如果模塊無法重新創建輸入,則錯誤「IDNA不會往返」會在行139上引發。在解碼功能中,輸入按點分割,每個零件在toUnicode
中轉換。在那裏文本被解碼,但是在返回結果之前,它會對結果進行編碼並將其與輸入進行比較,如果不相同則引發錯誤:「它不會往返」或encode(decode(text)) != text
。
在錯誤消息也得到了兩個字符串,它試圖來比較,在第一個例子,你可以:
UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')
你得到的錯誤,因爲它已轉化的「GROSSHANDEL店」 ß
到「grosshandel-shop」中的ss
。 The ß
character was added to the .de
-tld late 2010,所以這是一個錯誤。在更改ß
之前應該更改爲ss
。
你的第二個例子是可能已損壞,因爲它轉換爲:「đsottĤmqĐqǗoĔ⢠5」
XN - grohandel店-2FB已經由2008年IDNA(這是正確的德國/ DENIC因爲同時被正確編碼)。你的Python很可能試圖使用舊的IDNA 2003來解碼它,它不知道'ß'。 請參閱https://www.denic.de/en/know-how/idn-domains/ – rockdaboot 2017-01-23 14:56:28
我已創建錯誤報告:https://bugs.python.org/issue32437 – socketpair 2017-12-28 08:49:17