在MIME编码中的Quoted-Printable文本中,"=C2=A0"代表什么?

67

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

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})是一个编码字符。但在这种情况下,它似乎代表着什么都没有。
3个回答

129

=C2=A0 表示的是字节 C2 A0。由于这是 UTF-8 编码,它被翻译成 U+00A0,这是非断空格的 Unicode 编码。

请查看 UTF-8(维基百科)。


13
如果你阅读有关UTF-8的资料,会发现任何超过7F的单字节值必须编码为两个字符,并且第一个字符的高位始终被设置。因此,是的,A0始终被编码为C2 A0,这意味着你不能按字节处理。正确处理带引号编码的UTF-8的方法是先解码引号部分,然后再解码UTF-8,得到由2字节字符(技术上为UCS-16或UTF-16)组成的字符串。 - Steven Sudit
3
实际上,我喜欢编写 MIME 解析器之类的东西,但是我无法证明花费数天时间去制作一个功能只有便宜、可靠的第三方控件一小部分的东西是有道理的。 即使我只拿到最低工资,也不会划算。 - Steven Sudit
31
顺便提一下,这个的 HTML 代码是 <br>。如果有人在意的话。 - BMiner
1
@StevenSudit,我在想更新答案中的URL会很好。 - MikeMurko
3
@StevenSudit的评论中有几个技术错误。UTF-8是一种可变宽度编码:U+7F以上的码点用至少2字节编码,但根据所编码的值可能需要3或4字节。UCS-2(而不是UCS-16)是固定宽度16位编码,但无法编码所有Unicode字符,现在很少使用。更常见的UTF-16也是一种可变宽度编码,字符要么占用2个字节,要么占用4个字节。要用固定宽度编码表示所有Unicode代码点,需要4字节的UCS-4。 - IMSoP
显示剩余7条评论

3

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


-13

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接