能拘 发表于 2026-1-23 20:05:01

一天一个Python库:idna - 处理国际化域名的神器

idna - 处理国际化域名的神器

一、什么是idna?

idna 是一个用于处理国际化域名(Internationalized Domain Names, IDNA)的 Python 库。IDNA 允许域名包含非 ASCII 字符,例如中文、日文、阿拉伯文等。
它可以帮助你:

[*]将包含非 ASCII 字符的域名编码为 ASCII 兼容格式(Punycoder)。
[*]将 ASCII 兼容格式(Punycoder)解码回原始的国际化域名。
[*]确保域名符合最新的 IDNA 规范(IDNA2008)。
二、应用场景

idna 广泛应用于以下实际场景:

[*]网站开发: 当你的网站需要支持用户输入或显示包含非 ASCII 字符的域名时,idna 可以确保这些域名被正确处理。
[*]邮件服务: 处理包含国际化域名的电子邮件地址时,需要使用 idna 进行编码和解码。
[*]网络工具: 在开发网络扫描、域名解析等工具时,如果涉及到国际化域名,idna 是必不可少的。
三、如何安装


[*]使用 pip 安装
pip install idna# 如果安装慢的话,推荐使用国内镜像源pip install idna -i https://pypi.tuna.tsinghua.edu.cn/simple/
[*]使用 PythonRun 在线运行代码(无需本地安装)
四、示例代码

将国际化域名编码和解码
import idna# 这是一个包含非ASCII字符的国际化域名domain = "例子.com"encoded_domain_punycode = "" # 初始化一个空字符串,用于存储编码后的域名# 编码域名try:    encoded_domain_punycode = idna.encode(domain).decode('ascii')    print(f"原始域名: {domain}")    print(f"编码为 Punycode: {encoded_domain_punycode}")except idna.IDNAError as e:    print(f"编码域名 '{domain}' 失败: {e}")# 如果成功编码,则尝试解码if encoded_domain_punycode:    decoded_domain = "" # 初始化一个空字符串,用于存储解码后的域名    try:      decoded_domain = idna.decode(encoded_domain_punycode)      print(f"解码回原始域名: {decoded_domain}")    except idna.IDNAError as e:      print(f"解码域名 '{encoded_domain_punycode}' 失败: {e}")    # 简单条件判断,确认解码后的域名是否与原始域名一致    if decoded_domain == domain:      print("编码和解码成功,结果一致!")    else:      print("解码后的域名与原始域名不一致。")使用 PythonRun 在线运行这段代码,结果如下:
原始域名: 例子.com编码为 Punycode: xn--fsqu00a.com解码回原始域名: 例子.com编码和解码成功,结果一致!使用 MermaidGo 绘制示例代码的流程图,结果如下:
https://img2024.cnblogs.com/blog/70894/202601/70894-20260123193529799-1969074100.jpg
五、学习资源


[*]开源项目:idna
[*]中文自述:REMDME
[*]在线运行:PythonRun
如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

蓝娅萍 发表于 2026-2-2 05:06:42

懂技术并乐意极积无私分享的人越来越少。珍惜

涣爹卮 发表于 2026-2-3 09:16:30

谢谢分享,辛苦了

袁可佳 发表于 2026-2-7 23:00:21

懂技术并乐意极积无私分享的人越来越少。珍惜

泠邸 发表于 2026-2-9 03:57:36

这个好,看起来很实用

当贵 发表于 2026-2-9 06:37:44

过来提前占个楼

箝德孜 发表于 2026-2-9 12:15:28

谢谢分享,试用一下

里豳朝 发表于 2026-2-10 01:14:21

鼓励转贴优秀软件安全工具和文档!

类饲冰 发表于 2026-2-10 08:42:28

谢谢楼主提供!

更成痒 发表于 2026-2-11 04:48:27

东西不错很实用谢谢分享

吕颐然 发表于 2026-2-11 08:27:47

感谢分享,学习下。

嗳歉楞 发表于 2026-2-11 08:44:11

东西不错很实用谢谢分享

猷浮 发表于 2026-2-11 16:54:31

热心回复!

亢安芙 发表于 2026-2-12 11:57:36

谢谢楼主提供!

恶凝毛 发表于 2026-2-13 09:33:49

这个好,看起来很实用

炳裘垦 发表于 2026-2-13 21:00:26

过来提前占个楼

郦珠雨 发表于 2026-2-24 02:15:57

感谢分享,学习下。

榕闹 发表于 2026-3-7 09:36:26

感谢发布原创作品,程序园因你更精彩

鞣谘坡 发表于 2026-3-7 14:38:32

新版吗?好像是停更了吧。

萨瑞饨 发表于 11 小时前

谢谢楼主提供!
页: [1]
查看完整版本: 一天一个Python库:idna - 处理国际化域名的神器