Email 理解电子邮件中的UTF-8编码

Email 理解电子邮件中的UTF-8编码,email,content-type,unicode-string,thunderbird,Email,Content Type,Unicode String,Thunderbird,我试图理解hoUTF-8编码在电子邮件中的作用。我想看看雷鸟做了什么应该会有所帮助。所以我写了一封带有“äöü”字符的电子邮件,然后查看了雷鸟“发送”文件夹中的源代码。 邮件头上写着 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit 这些字符显示为“÷Ãü”(Unicode位置195 164 195 182 195 188)。然后我按照规则(我发现的)取回了我的原始信

我试图理解hoUTF-8编码在电子邮件中的作用。我想看看雷鸟做了什么应该会有所帮助。所以我写了一封带有“äöü”字符的电子邮件,然后查看了雷鸟“发送”文件夹中的源代码。 邮件头上写着

Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
这些字符显示为“÷Ãü”(Unicode位置195 164 195 182 195 188)。然后我按照规则(我发现的)取回了我的原始信件。以195164为例:字节为
1010101*1010100
。前两位表示我需要处理这两个字节。然后,我从第一个字节中删除4个前导位,从第二个字节中删除2个前导位,这使我的
0011100100
或228-unicode位置为“ä”

但后来我将该字符串扩展到“
äüÄäÜ
”并看到了“
ÃÃÃÃ195Ã195 ;Ÿ
”,我在unicode中的位置
195 164 195 182 195 188 195 8222 195 8211 195 339 195 376
。呃…8222,8211,339,376???所有值>255-我认为8位编码不能超过255


如何正确解码该文本?

这与utf-8无关,根据定义,一个字节不能超过255。如果您有8222,您要么将多个字节变为红色,要么完全执行其他操作。您应该看到
195 8222
而不是
195 8222
,然后是
195 150
而不是
195 8211
。8222是“·”的unicode位置,它是Thunderbird显示的邮件消息源的一部分。我很困惑地发现,在一封采用
内容传输编码:8bit
的邮件中,您在查看此邮件的任何工具中看到的字符都是无关的。没有unicode字符,即使以某种方式解释数据时可能会出现这种情况。您的消息是字节流,而不是unicode代码点流。当你这样看它的时候,我相信你会看到它是正确的。最终,当你用一个合适的邮件查看器看它的时候,msg是正确的——我不是在争论这个。我在理解信息传输时遇到了一个问题:我想在我能够将“÷Ô解码为“ä”之后,我就理解了UTF-8编码。但这种模式不适用于“为什么?”)就像我说的,你不是在一个字符一个字符地解码。您正在将字节解码为字符。当显示原始数据时,工具显示的任何“字符”都是完全伪造的。要手动执行解码,您需要获取一个十六进制查看器(或十进制查看器),它以数字序列的形式显示数据,每个数字为0-255。这与utf-8无关,一个字节的定义不能超过255。如果您有8222,您要么将多个字节变为红色,要么完全执行其他操作。您应该看到
195 8222
而不是
195 8222
,然后是
195 150
而不是
195 8211
。8222是“·”的unicode位置,它是Thunderbird显示的邮件消息源的一部分。我很困惑地发现,在一封采用
内容传输编码:8bit
的邮件中,您在查看此邮件的任何工具中看到的字符都是无关的。没有unicode字符,即使以某种方式解释数据时可能会出现这种情况。您的消息是字节流,而不是unicode代码点流。当你这样看它的时候,我相信你会看到它是正确的。最终,当你用一个合适的邮件查看器看它的时候,msg是正确的——我不是在争论这个。我在理解信息传输时遇到了一个问题:我想在我能够将“÷Ô解码为“ä”之后,我就理解了UTF-8编码。但这种模式不适用于“为什么?”)就像我说的,你不是在一个字符一个字符地解码。您正在将字节解码为字符。当显示原始数据时,工具显示的任何“字符”都是完全伪造的。要手动执行解码,您需要获取一个十六进制查看器(或十进制查看器),它以数字序列的形式显示数据,每个数字为0-255。