中文字符在邮件列表中显示为问号?

Chinese characters displayed as question marks in mailing list?

我订阅了一个内容主要是中文的邮件列表。每次收到邮件,每个汉字都被?代替。然后我查看了电子邮件 headers 并找到了

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

我觉得是这个问题,要解决这个问题我需要把charset改成兼容中文的。但是我该在哪里更改呢?

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

上的 运行

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

这不是问题。

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

如果不是数据库存储问题,那么问题出在生成电子邮件或将数据插入电子邮件模板时使用的字符集,电子邮件的来源是 not UTF-8 或相应的全中文字符集。

如:

  • HTML输入格式未设置为UTF-8(或正确的汉字集),
  • HTML输入表单容器网页未设置为UTF-8,HTML接收表单/代码未设置为UTF-8(或正确的中文字符集),
  • 电子邮件模板生成器未设置为 UTF-8(或正确的中文字符集)。
  • 发送服务器不使用默认的 UTF-8 headers。

此外,虽然你说 "content is primarily Chinese" 这并没有缩小多少,因为至少有五种 main 中文书面语言和许多使用相同语言的较小语言或非常相似的字符集。

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

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

供参考:Python Mailman and UTF-8 details (2008 question) and a character conversion guide (2009). Also this Whosebug anwser