UTF-8 Строка темы отображается как вопросительные знаки в Gmail - PullRequest
5 голосов
/ 14 июля 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

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

Вы можете декодировать его в python:

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

Также в python:

>>> 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: 請幫我給 與你起來的同事
2 голосов
/ 11 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...