2

我无法理解使用命令IMAP SEARCH CHARSET在 IMAP 服务器上搜索时使用Tunderbird的编码方法是什么

我试图搜索俄语单词“привет”,这被映射到“?@825B”,即

A001 SEARCH CHARSET ISO-8859-1 BODY "?@825B"

这是怎么发生的?我确信这是正确的,因为我已经使用嗅探器来捕获它,并且Dovecot服务器正确地找到了带有“привет”字样的邮件。ISO-8859-1 编码根本没有俄语字形!那么它是如何转换的呢?

例如,“привет”(写成 Unicode 字符)给出“??????” 对于我的机器上的ISO-8859-1编码或这里http://www.motobit.com/util/charset-codepage-conversion.asp

4

1 回答 1

0

Thunderbird 获取此值的方式是将(16 位?)Unicode 字符向下转换为一个字节。

例如,在 C#(其 char 和 string 类型在内部使用 UTF-16)中,这将得到您所看到的结果:

const string text = "привет";

var buffer = new char[text.Length];
for (int i = 0; i < text.Length; i++)
    buffer[i] = (char) ((byte) text[i]);

var result = new string (buffer);

Thunderbird 如何处理代理对是任何人根据问题已知的猜测。它可能会将代理对视为 2 个单独的字符(就像我上面的代码一样),或者它可能会将它们组合成一个 32 位 unicode 字符并将其向下转换为一个字节。

于 2019-09-21T11:37:12.133 回答