Python IDNA不提供往返服务

Python IDNA不提供往返服务,python,idn,punycode,Python,Idn,Punycode,我有一些无法解码的IDNA编码字符串。在Python中,我尝试u“xn--grohandel-shop-2fb”。解码(“idna”)并得到错误“idna不往返”。对于“xn--sottmqqo5-lgbe9b7no0hmz9u”也一样 我被难住了,谷歌搜索错误根本没有帮助。错误“IDNA不往返”意味着模块在解码和编码字符串时会得到不同的结果 通过查看for Python的IDNA模块,如果该模块无法重新创建输入,则在第139行出现错误“IDNA不往返”。在解码功能中,输入被点分割,每个部分在t

我有一些无法解码的IDNA编码字符串。在Python中,我尝试
u“xn--grohandel-shop-2fb”。解码(“idna”)
并得到错误“idna不往返”。对于
“xn--sottmqqo5-lgbe9b7no0hmz9u”
也一样

我被难住了,谷歌搜索错误根本没有帮助。

错误“IDNA不往返”意味着模块在解码和编码字符串时会得到不同的结果

通过查看for Python的IDNA模块,如果该模块无法重新创建输入,则在第139行出现错误“IDNA不往返”。在解码功能中,输入被点分割,每个部分在
toUnicode
中转换。在那里,文本被解码,但在返回结果之前,它对结果进行编码,并将其与输入进行比较,如果不相同,则会引发错误:“它不是往返的”或
编码(解码(文本))!=文本

在错误消息中,您还得到了它试图比较的两个字符串,在第一个示例中,您得到:

UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')
您得到错误是因为它已将“großhandel shop”中的
ß
转换为“grosshandel shop”中的
ss
,这是一个bug。在更改之前,应将
ß
更改为
ss

您的第二个示例可能是腐败的,因为它转换为:“đsottĤmqĐqǗoĔ”⢠5“

xn--grohandel-shop-2fb已由IDNA 2008正确编码(这在德国/丹尼语中是正确的)。您的Python很可能尝试使用旧的IDNA 2003对其进行解码,而IDNA 2003不知道“ß”。看见