2013-05-20 4 views
1

저는 IMAP에서 Python 및 imaplib을 사용하여 이메일을 받고 있습니다. 이 특정 경우에는받는 사람 : 주소에 문제가 있습니다.인코딩을 디코딩 할 수 없습니다 - Python 및 imaplib

인코딩 된 To : 필드를 추출하고 주소를 분리 한 다음 각각을 디코딩하려고합니다. 이 특정 문자열에 문제가 있습니다. 파이썬 decode_header 함수를 사용하여 Quoted-Printable/Base64 인코딩을 디코드하고 있습니다. 나는 인코딩 시작 : Vasco Patrício <[email protected]> (내 이름과 이메일)해야하는데

'=?utf-8?b?vmfzy28gugf0csoty2lv?= <[email protected]>' 

. 그러나

[('\xbeg\xf3\xcbo \xba\x07\xf4r\xca-\xcbio', 'utf-8'), ('<[email protected]>', None)] 

, 나는이 아주 간단한 코드를 사용하여 첫 번째 튜플을 디코딩하려고 :

for part in decoded_parts: 
    if part[1]: 
     part_text = part[0].decode(part[1]) 
    else: 
     part_text = part[0] 
를 예상 한 바와 같이, decode_header 2 튜플이 배열 결과 인코딩 된 문자열과 인코딩 세트를 반환

UnicodeDecodeError at /api/refresh/emails/ 
'utf8' codec can't decode byte 0xbe in position 0: invalid start byte 

내가하려고하는 것은 같은 예외 콘솔 결과를 통해 디코딩을 확인 :

은 내가 UnicodeDecodeError을 구하십시오.

decode_header가 유효한 인코딩 해제 가능 문자열을 해당 인코딩과 함께 반환해야합니까?

고맙습니다.

답변

2

어딘가에서 대문자를 잃었습니다.

적절한 인코딩 된 문자열은 =?utf-8?b?VmFzY28gUGF0csOtY2lv?=입니다. 당신은 동일하지만 모든 소문자로 보입니다.

Base64는 대소 문자를 구분하므로 (소문자 26 자, 대문자 26 자, 10 자릿수 및 기타 2자를 사용하여 64 글자를 구성), 소문자를 사용하면 물론 완전히 소거됩니다.

+0

알 수 있습니다. 실제로'To :'헤더는'to :','TO :'또는 순열이 될 수 있으므로 문자열 감지로 인한 경우를 낮추었습니다. 그래서 나는 수색을 쉽게하기 위해 그것을 줄였다. 나는 그것이 인코딩을 깨뜨릴 것이라고 생각하지 못했습니다 - 그리고 나는 결코 이것을 알아 내지 못했을 것입니다. 귀중한 의견을 보내 주셔서 감사합니다! –