2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python:中文域名的编码处理

时间:05-15来源:作者:点击数:30

中文域名 通过 https://whois.aliyun.com/domain/百度.中国 域名信息查询(WHOIS)结果如下

  • Domain Name: 百度.中国
  • Puny Name: xn--wxtr44c.xn--fiqs8s

中文域名处理

  • print('中国'.encode('punycode'))
  • # b'fiqs8s'
  • print('百度.中国'.encode('punycode'))
  • # b'.-lq6ay5zb9h854a'
  • print('百度.中国'.encode('idna'))
  • # b'xn--wxtr44c.xn--fiqs8s'

英文域名处理

  • print('www.baidu.com'.encode('idna'))
  • # b'www.baidu.com'
  • print('www.baidu.com'.encode('punycode'))
  • # b'www.baidu.com-'

查看Python ssl模块的源码

  • class SSLContext(_SSLContext):
  • def _encode_hostname(self, hostname):
  • if hostname is None:
  • return None
  • elif isinstance(hostname, str):
  • return hostname.encode('idna').decode('ascii')
  • else:
  • return hostname.decode('ascii')

里边有一个_encode_hostname 函数,处理域名编码

  • def encode_hostname(hostname):
  • if hostname is None:
  • return None
  • elif isinstance(hostname, str):
  • return hostname.encode('idna').decode('ascii')
  • else:
  • return hostname.decode('ascii')
  • if __name__ == '__main__':
  • print(encode_hostname('www.baidu.com'))
  • # www.baidu.com
  • print(encode_hostname('baidu.中国'))
  • # baidu.xn--fiqs8s
  • print(encode_hostname('百度.中国'))
  • # xn--wxtr44c.xn--fiqs8s

可以看到,处理结果是我们想要的

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门