纯文本电子邮件无法显示非 ASCII 字符?
Plain text email not able to display non-ASCII characters?
我最近与某组织的客户服务代表就该组织的电子邮件中的非 ASCII 字符进行了电子邮件交流。这个角色正确地存储在该组织的在线系统中,但是当从那里检索并通过电子邮件发送给我时,这个角色似乎被转换为不同的表示形式。
在 Linux 上查看 Thunderbird 78.7.1 中客户服务代表的电子邮件,应该是 'ü' 的字符显示为黑色菱形背景上的白色问号:'�'
该字符也因此出现在我的网络浏览器(Linux 上的 Firefox 88.0.1)的 Gmail 中,因此它看起来与 Thunderbird 作为我的电子邮件客户端程序无关。
当我询问处理该字符的系统是否将字符限制为ASCII字符集时,得到的答复是:
“此确认以不显示特殊字符的纯文本形式发送。”
我很确定即使是纯文本电子邮件也可以显示非 ASCII 字符,重要的是字符编码,Unicode 允许正确显示所有字符,只要用户代理显示文本安装了相应的字体。
关于搞笑字符�:查看消息源,文中相应位置有如下字符序列:=EF=BF=BD
那是什么编码,“ü”怎么可能被翻译成“=EF=BF=BD”?
已编辑:
这是电子邮件源的匿名摘录,其中包含与编码相关的部分以及最后一行提到的有趣字符:
...
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Mailer: ColdFusion 2016 Application Server
Your contact information on file is as follows: =
=20
G=EF=BF=BDld...
该序列表示 Unicode“未知字符”字形 U+FFFD,因此它要么错误地存储在他们的数据库中,要么被发送电子邮件的软件错误编码。
事实上,带有 Content-Type: text/plain
的 MIME 部分可以选择有一个 charset
参数来 select 一个不同于 7 位 US-ASCII 的遗留 pre-MIME 默认值的字符集.此工具成为电子邮件的一部分的时间比 Thunderbird 或 Gmail 的存在时间长得多,根据您的描述,他们自己的邮件显然是作为 UTF-8 和引用打印编码发送的。
您可以轻松地向他们证明他们的电子邮件客户端可以显示中文、阿拉伯文、西里尔文、希伯来文和印度文的混合字符,只需向他们发送一个即可。
Subject: demo text/plain message
Mime-Version: 1.0
Content-type: text/plain; charset="utf-8"
Content-transfer-encoding: quoted-printable
Here's =C3=BC, and here's =EF=BF=BD
应该显示为
Here's ü, and here's �
您可以从完整的 Unicode 库中添加其他字符,方法是查找它们的代码点并将其编码为可引用打印;不难找到可以让您轻松输入任意文本并对其进行编码的网站。
在正确配置了出站电子邮件的类 Unix 系统上,您可以通过将此消息存储在文本文件中来发送该消息,然后
sendmail -oi yourself@example.org <filename
Unicode 专门将 U+FFFD 指定为当由于某种原因无法对正确的字形进行编码时使用的字形。我们可以推测他们的电子邮件系统或来自他们数据库的桥是由对电子邮件或 Unicode 甚至两者的了解有限的初级开发人员实现的。一个正确的实现是将数据库存储为 UTF-8 并简单地逐字提取信息;但一些遗留数据库平台要求非 ASCII 字符串以某些专有或遗留格式存储。
管理此问题的核心相关 IETF 标准是 RFC5322 for the basic format of email messages, and RFCs 2045 trough 2048 which describe MIME (the full set is not necessary; 2045 is the centerpiece, 2046 describes different content types, and 2047 provides a special notation specifically for email header values). Wikipedia has an article which describes and discusses the Unicode replacement character.
我最近与某组织的客户服务代表就该组织的电子邮件中的非 ASCII 字符进行了电子邮件交流。这个角色正确地存储在该组织的在线系统中,但是当从那里检索并通过电子邮件发送给我时,这个角色似乎被转换为不同的表示形式。
在 Linux 上查看 Thunderbird 78.7.1 中客户服务代表的电子邮件,应该是 'ü' 的字符显示为黑色菱形背景上的白色问号:'�'
该字符也因此出现在我的网络浏览器(Linux 上的 Firefox 88.0.1)的 Gmail 中,因此它看起来与 Thunderbird 作为我的电子邮件客户端程序无关。
当我询问处理该字符的系统是否将字符限制为ASCII字符集时,得到的答复是:
“此确认以不显示特殊字符的纯文本形式发送。”
我很确定即使是纯文本电子邮件也可以显示非 ASCII 字符,重要的是字符编码,Unicode 允许正确显示所有字符,只要用户代理显示文本安装了相应的字体。
关于搞笑字符�:查看消息源,文中相应位置有如下字符序列:=EF=BF=BD
那是什么编码,“ü”怎么可能被翻译成“=EF=BF=BD”?
已编辑: 这是电子邮件源的匿名摘录,其中包含与编码相关的部分以及最后一行提到的有趣字符:
...
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Mailer: ColdFusion 2016 Application Server
Your contact information on file is as follows: =
=20
G=EF=BF=BDld...
该序列表示 Unicode“未知字符”字形 U+FFFD,因此它要么错误地存储在他们的数据库中,要么被发送电子邮件的软件错误编码。
事实上,带有 Content-Type: text/plain
的 MIME 部分可以选择有一个 charset
参数来 select 一个不同于 7 位 US-ASCII 的遗留 pre-MIME 默认值的字符集.此工具成为电子邮件的一部分的时间比 Thunderbird 或 Gmail 的存在时间长得多,根据您的描述,他们自己的邮件显然是作为 UTF-8 和引用打印编码发送的。
您可以轻松地向他们证明他们的电子邮件客户端可以显示中文、阿拉伯文、西里尔文、希伯来文和印度文的混合字符,只需向他们发送一个即可。
Subject: demo text/plain message
Mime-Version: 1.0
Content-type: text/plain; charset="utf-8"
Content-transfer-encoding: quoted-printable
Here's =C3=BC, and here's =EF=BF=BD
应该显示为
Here's ü, and here's �
您可以从完整的 Unicode 库中添加其他字符,方法是查找它们的代码点并将其编码为可引用打印;不难找到可以让您轻松输入任意文本并对其进行编码的网站。
在正确配置了出站电子邮件的类 Unix 系统上,您可以通过将此消息存储在文本文件中来发送该消息,然后
sendmail -oi yourself@example.org <filename
Unicode 专门将 U+FFFD 指定为当由于某种原因无法对正确的字形进行编码时使用的字形。我们可以推测他们的电子邮件系统或来自他们数据库的桥是由对电子邮件或 Unicode 甚至两者的了解有限的初级开发人员实现的。一个正确的实现是将数据库存储为 UTF-8 并简单地逐字提取信息;但一些遗留数据库平台要求非 ASCII 字符串以某些专有或遗留格式存储。
管理此问题的核心相关 IETF 标准是 RFC5322 for the basic format of email messages, and RFCs 2045 trough 2048 which describe MIME (the full set is not necessary; 2045 is the centerpiece, 2046 describes different content types, and 2047 provides a special notation specifically for email header values). Wikipedia has an article which describes and discusses the Unicode replacement character.