4

我订阅了一个以中文为主的邮件列表。每次收到邮件,每一个汉字都会被替换成?. 然后我挖掘了电子邮件标题并发现

> Content-Type: text/plain; charset="utf-8"

我认为这是问题所在,要解决我需要将其更改charset为与中文兼容的问题。但是我在哪里改变这个?

我认为我无法更改它,因为无论我使用哪个邮件客户端,都会出现问题。邮件列表在Python mailman.

4

1 回答 1

2

内容类型:文本/纯文本;字符集="utf-8"

这不是问题。

UTF-8 可以显示每种语言的每个字符。很可能实际发生的是,有问题的网站将数据存储在不是真正的 UTF-8 的数据库中,例如 MySQL utf8_排序规则和不是真正的 UTF-8 的字符集。

如果不是数据库存储问题,则问题来自生成电子邮件或将数据插入电子邮件模板时使用的字符集,沿线某处电子邮件的来源不是UTF-8 或相应的全中文字符放。

如 :

  • HTML 输入表单未设置为 UTF-8(或正确的中文字符集),
  • HTML 输入表单容器网页未设置为 UTF-8,HTML 接收表单/代码未设置为 UTF-8(或正确的中文字符集),
  • Emailer 模板生成器未设置为 UTF-8(或正确的中文字符集)。
  • 否则发送服务器不使用默认的 UTF-8 标头。

此外,虽然您说“内容主要是中文”,但这并没有缩小范围,因为至少有五种主要的中文书面语言和许多使用相同或非常相似的字符集的较小语言。

您希望使用 UTF-8 编码使用International Resource Identifiers构造电子邮件。UTF-8 实现了 unicode,在 unicode 中,每个字符都有一个代码点,即所有汉字的 0x4E00 和 0x9FFF(2 个字节)之间。

但是 UTF8 不会通过仅存储它们的代码点来对字符进行编码(UTF32 就是这样做的)。相反,它使用更复杂的标准,使所有中文表意文字的长度为 2 或 3 个字节。

供参考:Python Mailman 和 UTF-8 详细信息(2008 年问题)和字符转换指南(2009 年)。还有这个 Stackoverflow anwser

于 2016-05-03T05:10:06.853 回答