Discuss / Python / 编码解码的问题

编码解码的问题

Topic source

获取到的email是二进制,转化为string的时候用了decode('utf-8'),这一点好理解,但是为什么decode之后的text仍然是包含了一堆字符。看起来像是用base64编码过的一样,为什么还需要再去解码呢?再去解码的时候用的是什么,我是用QQ邮箱发送的,显示的解码器是GBK。GBK解码不应该是用在二进制的上的吗?还是说作为一个message instance,其实他的主体看起来是一对字符,但是当去解码的时候把他再去变成二进制,再去进行GBK解码。

我所指的是这一句:text = b'\r\n'.join(lines).decode('utf-8') 和print_info中的频繁解码,我用print的方式输出了他们的解码方式,都是GBK

不知道这样解释是否合理: 邮件经历这样的一个过程:二进制-->由utf-8解码,出来的包含了email信息的正常字符(header的属性这一类),其他字符均为base64。 再后续的分析中,当需要解码本体的时候,是base64-->二进制-->相应的编码方式(GBK)解码

明白了

        if content_type=='text/html' or content_type=='text/plain':
        content=msg.get_payload(decode=True)
        charset=guess_charset(msg)#需要从头文件中获取这些信息
        print('是否需要base64之外的解码方式!?%s'%content)

在这里可以看出,content为二进制,然后将decode=True该部false之后,就会出现错误,那么就能这么解释了:

  1. 最开始获取的message主体部分,必须由utf-8解码,因为Header和其他表示主体格式的文本为utf-8编码的。这也就解释了,为什么输出的是乱的,因为文本部分是由其他编码格式进行编码的
  2. 之后在这里decode=True代表需要再次解码,那么就把主体重新当作二进制返回了回去。

这只是猜测,不知道如何打开这些模块的源码,看源码更能解释这个过程。

不是很懂到底应该怎么解码,先mark下.


  • 1

Reply