C#问题中的UTF8(Quoted Printable)转换

我从邮箱中提取法语电子邮件,电子邮件包含重音符号。 我相信它使用的是UTF8编码。

我尝试过在互联网上找到的不同的UTF8转换方法,但都没有成功。

例如,在C#中,如何转换它:Montr = C3 = A9al到Montréal?

编辑:此外,它是不一致的。 有时它可能像Montré al。 (仅在添加&符之后的空格,因此浏览器不会转换它。)

谢谢!! 标记

那不是UTF-8。 这是引用可打印的 ,与UTF-8编码的编码方式不同 – 它更像是“ASCII文本到Unicode文本”编码。

引用的printable将有效地允许您将ASCII消息转换为字节数组, 然后可以其解码为UTF-8。

我不确定在引用可打印编码的.NET中是否有任何直接支持,这有点奇怪…我可能错过了一些东西。

UTF-8编码将字节数组(8位数字)转换为字符串(反之亦然)。 即,“数字”和“字符”之间存在映射。 字符集大于ASCII字符集,例如é是UTF-8的一部分,但不是ASCII的一部分。

Quoted-Prinable编码将字节数组(8位数字)转换为ASCII字符序列(实际上是它的一个子集)。

因此,结合两者,您可以将UTF-8字符串“编码”为ASCII字符(子集)的序列(ASCII字符串)。

其他编码也可以这样做(例如ISO-8859-1)。 因此,您需要同时拥有这两个信息:

  • 给定的ASCII字符串是可引用的
  • 生成的字节数组表示具有UTF-8编码的字符串。

解码quoted-printable因此有两个步骤:

  1. 通过引用的可打印规则创建字节数组say bytes [],即

    • substring = NM映射到字节NM(其中NM是hex)(“N * 16 + M”)
    • 任何其他字符映射到其ASCII字节(请注意,类似的q编码字具有_到空间的附加映射)
  2. 然后将字节数组解释为UTF-8字符串。