2010-07-13 12 views
5

Я пытаюсь отправить электронное письмо с китайскими иероглифами в строке темы из моей программы в учетную запись gmail, но строка темы отображается как ????. Так закодирована строка темы:UTF-8 Строка вопроса появляется в виде вопросительных знаков в Gmail

=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?= 

Есть ли что-то не так в кодировке? Есть ли что-то, что я должен помнить? Почта также содержит китайские иероглифы в теле, но они отображаются очень хорошо. Я использую base64 для кодирования тела.

ответ

2

Для тех, кто интересуется ответом на этот вопрос, эта строка является заголовком MIME, закодированным в соответствии с RFC2047. =?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?= означает, что он использует кодировку UTF-8, B означает кодировку Base 64.

В PHP используйте iconv_mime_decode.

2

=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?= кодируется базой64, а строковый буфер (после декодирования base64) кодируется utf-8.

Вы можете расшифровать его в python:

>>> from base64 import b64decode 
>>> b64decode(b'Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=').decode('utf-8') 
'FW: 請幫我給 與你起來的同事' 

Также в питоне:

>>> from email.header import decode_header 
>>> decode_header('=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?=') 
[(b'FW: \xe8\xab\x8b\xe5\xb9\xab\xe6\x88\x91\xe7\xb5\xa6 \xe8\x88\x87\xe4\xbd\xa0\xe8\xb5\xb7\xe4\xbe\x86\xe7\x9a\x84\xe5\x90\x8c\xe4\xba\x8b', 'utf-8')] 
>>> _[0][0].decode(_[0][1]) 
'FW: 請幫我給 與你起來的同事' 

Или в bash (возможно, вы должны труба к iconv):

~ $ echo Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos= | base64 -d 
FW: 請幫我給 與你起來的同事