loc*_*ose 6 python unicode punycode sendgrid
我正在尝试从数据库将联系人添加到Sendgrid ,该数据库偶尔会将用户电子邮件存储在punycode example-email@xn--yaho-sqa.com中,该代码会转换example-email@yah\xc3\xb3o.com为 Unicode。
无论如何,如果我尝试添加ascii版本,则会出现错误,因为sendgrid不接受它 - 但它确实接受 Unicode 版本。
\n那么有没有办法在Python中将它们转换。
\n所以我认为长话短说有没有办法将punycode解码为 Unicode?
\n编辑
\n正如评论中所建议的,我尝试\n'example-email@yah\xc3\xb3o.com'.encode('punycode').decode()返回example-email@yaho.com-cgc,所以这在Python之外是不正确的,所以不是一个有效的解决方案。
提前致谢。
\n您的编码电子邮件地址中有xn-- ACE 前缀:
\n\nIDNA 的 ACE 前缀是“xn--”或其任何大写字母。
\n
因此应用idna编码(参见Python Specific Encodings):
\n\n编解码器
\nidna实现RFC 3490,另请参阅encodings.idna。\n仅支持Errors=\'strict\'。
结果:
\n\'yah\xc3\xb3o.com\'.encode(\'idna\').decode()\n# \'xn--yaho-sqa.com\'\nRun Code Online (Sandbox Code Playgroud)\n反之亦然:
\n\'xn--yaho-sqa.com\'.encode().decode(\'idna\')\n# \'yah\xc3\xb3o.com\'\nRun Code Online (Sandbox Code Playgroud)\n您可以使用该idna库来代替:
\n\n支持应用程序中的国际化域名 (IDNA)\n协议,如RFC 5891中指定。这是协议的最新版本,有时称为 \xe2\x80\x9cIDNA 2008\xe2\x80\x9d。
\n该库还提供对 Unicode 技术标准 46、\n Unicode IDNA 兼容性处理的支持。
\n这可以作为
\nencodings.idnaPython 标准库附带的 \xe2\x80\x9c \xe2\x80\x9d 模块的合适替代品,但仅支持较旧的被取代的 IDNA 规范 ( RFC 3490 )。
| 归档时间: |
|
| 查看次数: |
3917 次 |
| 最近记录: |