从stdin读取任何类型的编码,我不知道它会是什么

时间:2016-07-23 02:18:54

标签: python stdin mime

我正在从stdin处理电子邮件订阅源,我收到了50种不同编码的电子邮件。如何编写代码将其转换为UTF-8,或者只是在内存中读取它。

SyntaxError:第450行文件mime2vt.py中的非ASCII字符'\ xc2',但未声明编码;

我无法申报和编码,因为互联网上的随机人员已经编码了。

  1. 将其读入内存。我在这一步收到错误
  2. 检测类型
  3. 解码
  4. 我已修改地址以保护自己

    Return-Path: <vba@uyh.com>
    X-Original-To: me@me.com
    Delivered-To: me@me.com
    Received: from uyh.com (unknown [27.150.160.116])
            by <me> (Postfix) with ESMTP id 528FC7B5A53
            for <me@me.com>; Fri, 25 Sep 2015 18:49:13 -0500 (CDT)
    From: =?GB2312?B?x+vXqtDox/PIy9Sx?= <vba@uyh.com>
    Subject: =?GB2312?B?tNO8vMr119/P8rncwO0=?=
    To: me@me.com
    Content-Type: text/plain;charset="GB2312"
    Date: Sat, 26 Sep 2015 07:49:08 +0800
    X-Priority: 2
    X-Mailer: Microsoft Outlook Express 5.50.4133.2400
    
    ´Ó¼¼Êõ×ßÏò¹ÜÀí
    
    2015Äêʱ¼ä°²ÅÅ
    10ÔÂ26-27ÈÕ±±¾©   11ÔÂ2-3ÈÕÉϺ£     10ÔÂ29-30ÈÕÉîÛÚ
    11ÔÂ19-20±±¾©     11ÔÂ23-24ÈÕÉϺ£   11ÔÂ30-12ÔÂ1ÈÕÉîÛÚ
    12ÔÂ28-29ÈÕ±±¾©   12ÔÂ24-25ÈÕÉϺ£   12ÔÂ21-22ÈÕÉîÛÚ
    

    这是错误的代码。

    data =  join([sys.stdin])
       for line in sys.stdin:
          data+=line.decode("utf8")
       msg = email.message_from_string(data)
    

    我甚至无法访问 charset = 值。这也可能是伪造的,但至少我会有一些线索。

    我刚试过这个: 的数据= sys.stdin.read(100) 得到了这个:

      File "/usr/lib64/python3.5/codecs.py", line 321, in decode
        (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 546: invalid start byte
    

    我甚至没有要求字节546,即使我要求1个字节,它仍然会读取它。

    有人建议python3 -u </here/whatever 那仍然是错误。

0 个答案:

没有答案