4

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

我很困惑,谷歌搜索错误根本没有帮助。

4

1 回答 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”中转换ßss“grosshandel-shop”中。ß字符已添加到.de-tld late 2010,因此这是一个错误。在更改之前ß应该更改为ss.

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

于 2012-05-18T05:07:03.500 回答