email_utils模块中parseaddr函数和formataddr函数的用法

email模块用于规范电子邮件的格式。一般写的电子邮件收发件人会有name<xxx@163.com>的格式。所以引入email_utils里面的parseaddr和format函数规范收发件人的信息。

 

farseaddr函数

farseaddr函数接收到一个name<xxx@163.com>格式的字符串,返回姓名和地址,去掉尖括号。

formataddr函数

format函数接收一个元组,元组的第一个元素是经过Header(name,"utf-8")转换好的格式,第二个是addr,(就是farseaddr函数返回的两个字符串,第一个name参数要经过Header函数换一个格式)。然后format函数返回经过规范好的email格式:返回的第一个参数是经过Header函数编码的用户名信息,第二个参数是地址字符串。    (注意这里的Header函数就是一个编码函数,具体要了解就需要多了解到一些电子邮件头的协议这方面的知识,所以只需要知道这个函数就是个编码的函数)

其实这里面Header函数编码的问题一直不理解,就先记录一下关于编码的一些知识。

ASCII是美国的一种编码集:里面封装了字母,数字和一些特殊字符,一共只有128个。GBK是中国的编码集,里面封装的中文字符,中文字符占两个字节。国际为了方便就创建了一个unicode字符集,里面封装了全世界各国的字符,现在都能用,为了能方便能够编码这个大的字符集,就采用了utf-8的编码格式,中文占三个字节。(关于这些就很好理解)

难点就是在于使用的时候,这里参考这个链接。这里说一下我的理解,在pycharm里面右下角都是utf-8,说明这里面都是采用utf-8来编码成字节型数据。(但是我们都知道字节型数据的取值范围是0-255,这里再提一下为什么是0-255,因为一个字节有八位,都是0和1,2的八次方就是256,所以一个字节有256)。

但是要是在一个字符串前面加个b‘’,这样这个字符串就会变成字节型数据,如果你随便输入一些英文字符,输出最后还是这个,这一点容易迷,字节型数据不都是01数字嘛,这时候需要知道一点如果你直接 s = b'abc',这样是默认按着ASCII来进行编码,所以只能输入ASCII字符集里面的,就是字母,数字和一些特殊字符。如果要是这样输入b'你好'就会报错。其实就是bytes()这个方法,使用的是ASCII字符集,只能输入这个字符集里面的字符。

既然s是一个字节型的数据,为什么里面可以是abc,而不是一些数字嘛,因为字节型的数据本来就是一些01数字,这时候需要知道一点(我也一直在这迷了好久),在上面那个链接有说,pytho会自动把这些可读的数据显示出来(至于为什么只显示英文,我的理解就是python用的就是英文字符串,自身可以显示这些,不能显示中文)。但是中文的要是转成字节型数据,如何把这个字节型数据表现出来呢,就采用16进制表现出来。

s = '你好'.encode("gbk")
#这个时候s已经是一个字节型的数据了
print(type(s))
print(s)
b'\xc4\xe3\xba\xc3'
# 前面的b表示这是个字节型的数据,不是那个bytes()方法,别搞混了
# 可以看到字节型数据不是01数字嘛,其实这是python为了方便看,就转成16进制了,
# 前面的\x表示是16进制。如果len()一下这个字节型数据,可以看到有四个字节,
# 因为我是按着gbk这个编码格式编码的,在gbk里面一个中文字符占两个字节。
# 所以我还能这样改一下
s1 = '你好'.encode("utf-8")
encode是编码的意思,就是编成字节型数据
bytes()这个方法默认采用ASCII。
print(s1)
b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 这回我将编码格式给换成ut-8了,在Unicode里面一个中文字符占三个字节
# 就可以看到有六个字节

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值