IDNA不具备回路传输功能

4

我有一些无法解码的IDNA编码字符串。在Python中,我尝试使用u"xn--grohandel-shop-2fb".decode("idna"),但是出现了错误“IDNA不往返”。对于"xn--sottmqqo5-lgbe9b7no0hmz9u"也是如此。

我很困惑,谷歌搜索这个错误也没有任何帮助。

1个回答

5
“IDNA不完全循环”错误意味着模块在解码和编码字符串时得到了不同的结果。通过查看Python IDNA模块的源代码,如果模块无法重新创建输入,则会在第139行引发“IDNA不完全循环”错误。 在decode函数中,将输入按点拆分,并将每个部分转换为toUnicode。在那里,文本被解码,但在返回结果之前,它对结果进行编码并与输入进行比较,如果不同则引发错误:“它不是一个完整循环”,即encode(decode(text))!= text

在错误消息中,您还可以获得尝试比较的两个字符串,在第一个示例中,您会得到:

UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')

你之所以出现这个错误,是因为它将“großhandel-shop”中的ß转换成了“grosshandel-shop”中的ss2010年后,ß字符被添加到了.de-tld中,所以这是一个错误。在这个变化之前,ß应该被改成ss 你提供的第二个例子可能已经损坏,因为它转换成了:“đsottĤmqĐqǗoĔ⢠5”。

1
xn--grohandel-shop-2fb已经通过IDNA 2008正确编码(在德国/DENIC已经一段时间正确)。您的Python很可能尝试使用旧的IDNA 2003进行解码,而它不认识'ß'。请参见https://www.denic.de/en/know-how/idn-domains/。 - rockdaboot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接