Encoding “什么是”呢=C2=A0";在MIME编码中,引用可打印文本?

Encoding “什么是”呢=C2=A0";在MIME编码中,引用可打印文本?,encoding,mime,quoted-printable,Encoding,Mime,Quoted Printable,这是我试图解析的原始电子邮件示例: MIME-version: 1.0 Content-type: text/html; charset=UTF-8 Content-transfer-encoding: quoted-printable X-Mailer: Verizon Webmail X-Originating-IP: [x.x.x.x] =C2=A0test testing testing 123 什么是=C2=A0?我已经尝试了半打引用的可打印解析器,但没有一个能够正确处理这个问题如

这是我试图解析的原始电子邮件示例:

MIME-version: 1.0
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: quoted-printable
X-Mailer: Verizon Webmail
X-Originating-IP: [x.x.x.x]

=C2=A0test testing testing 123
什么是=C2=A0?我已经尝试了半打引用的可打印解析器,但没有一个能够正确处理这个问题如何在C#中正确解析这个问题?

老实说,目前我正在编写:

//TODO WTF
encoded = encoded.Replace("=C2=A0", "");
因为我不明白为什么这些文本在MIME内容中是随机的,不应该被渲染成任何东西。只要去掉它,我就能得到想要的效果——但为什么


要清楚,我知道(=[0-9A-F]{2})是一个编码字符。但在本例中,它似乎不代表任何内容。

=C2=A0
表示字节C2 A0。因为这是UTF-8,所以它转换为U+00A0,这是用于非中断空间的Unicode


请参阅(Wikipedia)。

%C2%A0这是隐藏文件夹的代码,创建一个隐藏文件夹并保存在其中,例如文本文件,然后通过浏览器打开该文件,您将在搜索栏中看到这些字符。据我所知,这些字符是可选的,不会转换为其他代码。

%C2%A0是一个不间断的空格

如果您阅读UTF-8,您将看到任何超过7F的单字节值都必须编码为两个字符,并且第一个字符将始终设置其高位。所以,是的,A0总是被编码为c2a0,这意味着你不能一个字节一个字节地走。使用引号编码处理UTF-8的正确方法是首先对引号部分进行解码,然后对UTF-8进行解码,生成由2字节字符组成的字符串(技术上是UCS-16或UTF-16)。谢谢Steven。我将继续购买它,因为我厌倦了一起破解这些废话事实上,我喜欢编写MIME解析器之类的东西,但我实在无法证明花上几天的时间来制作一些具有廉价、可靠的第三方控件功能的东西是合理的。即使我拿到最低工资,也不划算。顺便说一句,这是HTML代码,以防万一,上面@StevenSudit的评论中有几个技术错误。UTF-8是一种可变宽度编码:U+7F以上的代码点至少用2个字节编码,但可能需要3或4个字节,具体取决于编码的值。UCS-2(不是UCS-16)是一种固定宽度的16位编码,但不能对所有Unicode编码,并且很少再使用。更常用的UTF-16是另一种可变宽度编码,字符长度为2或4字节。要以固定宽度编码表示所有Unicode代码点,需要4字节UCS-4。