gpt4 book ai didi

Python:使用 punycode 无法正确解码 'Idna' 字符

转载 作者:行者123 更新时间:2023-12-01 02:09:52 34 4
gpt4 key购买 nike

我的应用程序从 Twitter 对象接收 URL。 URL 采用 Punycode 格式,例如“http://xn--espaol-zwa.come” '

在我的应用程序中,我将字符指定为字节,然后解码 idna 类型。它适用于某些网址,但不适用于所有网址

它适用于此网址:

>>> url1= 'www.xn--alliancefranaise-npb.nu'
>>> r= url1.encode('utf-8')
>>> r.decode('idna')
'www.alliancefrançaise.nu'

不是这个

>>> url1= 'http://xn--espaol-zwa.come'
>>> r= url1.encode('utf-8')
>>> r.decode('idna')
'http://xn--espaol-zwa.come'

我想要一个适用于任何 URL 的代码

最佳答案

尽管接受的答案本身是正确的。 Python 内置 idna 编解码器正在工作。我在3.5.2和3.7.0中测试过。真正的问题是这个例子是错误的。 idna 编解码器严格适用于 DNS 主机名而不是 URL。

原始示例不起作用:

>>> url1= 'http://xn--espaol-zwa.come'
>>> r= url1.encode('utf-8')
>>> r.decode('idna')
'http://xn--espaol-zwa.come'

删除 URL 前缀后不起作用的原始示例:

>>> url1= 'xn--espaol-zwa.come'
>>> r= url1.encode('utf-8')
>>> r.decode('idna')
'español.come'

重要的是要记住 idna 仅适用于 DNS 主机名,并且仅允许使用有限的字符集。它不应该应用于 URL 或嵌入主机名的整个字符串。有一个内置的 Python punycode 编解码器,它受到更多限制,只能正确处理删除了 xn-- 前缀的 punycode 编码字符串。我相信 punycode 是 idna 编解码器使用的底层编解码器,并且如果没有脚手架代码只提供带有 xn-- 前缀的主机名部分,并且只能解码后面的部分,则 punycode 编解码器无法在更高级别使用。 xn-- 前缀不是 xn--hostname-xyz.com 完整主机名,也不是 xn--hostname-xyz 只是主机名-xyz。

关于Python:使用 punycode 无法正确解码 'Idna' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767058/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com