我正在尝试将主题行中包含中文字符的电子邮件从我的程序发送到 gmail 帐户,但主题行显示为????
. 这是主题行的编码方式:
=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?=
编码有什么问题吗?有什么我需要记住的吗?邮件正文中还包含汉字,但显示得很好。我正在使用 base64 对正文进行编码。
我正在尝试将主题行中包含中文字符的电子邮件从我的程序发送到 gmail 帐户,但主题行显示为????
. 这是主题行的编码方式:
=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?=
编码有什么问题吗?有什么我需要记住的吗?邮件正文中还包含汉字,但显示得很好。我正在使用 base64 对正文进行编码。
=?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: 請幫我給 與你起來的同事
对于那些对这个问题的答案感兴趣的人,这个字符串是一个按照RFC2047编码的 MIME 标头。
=?utf-8?B?Rlc6IOiri+W5q+aIkee1piDoiIfkvaDotbfkvobnmoTlkIzkuos=?=
表示它使用 UTF-8 字符集,B
表示 Base 64 编码。
在 PHP 中,使用iconv_mime_decode
.