【问题标题】:UTF8 (Quoted Printable) conversion in C# questionC# 问题中的 UTF8 (Quoted Printable) 转换
【发布时间】:2011-03-18 10:12:02
【问题描述】:

我正在从邮箱中提取法语电子邮件,这些电子邮件包含口音。我相信它使用的是 UTF8 编码。

我尝试了在 Internet 上找到的不同 UTF8 转换方法,但均不成功。

例如,在 C# 中,我如何将这个:Montr=C3=A9al 转换为 Montréal?

编辑:另外,它是不一致的。有时它可能就像蒙特利尔。 (和号后面的空格是刚刚添加的,所以浏览器不会转换它。)

谢谢!! 标记

【问题讨论】:

标签: c# utf-8


【解决方案1】:

那不是 UTF-8。那是quoted printable,它与 UTF-8 的编码类型完全不同——它更像是一种“ASCII 文本到 Unicode 文本”编码。

引用的可打印文件将有效地让您将 ASCII 消息转换为字节数组,然后可以将其解码为 UTF-8。

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

【讨论】:

  • 我不这么认为。当我从 QP 转换时,我得到这个:蒙特利尔。它将每个 =C3 和 =A9 作为一个单独的实体。但是,需要将它们一起解释才能得到 é。
  • @user390480:这表明您没有正确地从 QP 转换。您需要从 QP 转换为二进制,然后然后使用 UTF-8 编码将该二进制解码为文本。
  • @JonSkeet,我遇到了同样的问题here。您是否有机会发布如何从 QP 转换的代码示例?谢谢!
【解决方案2】:

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

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

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

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

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

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

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

    • 子字符串 =NM 映射到一个字节 NM(其中 NM 是十六进制)(“N*16 + M”)
    • 任何其他字符映射到它的 ASCII 字节 (请注意,类似的 q-encoded-word 有一个额外的 _ 到空格的映射)
  2. 然后将字节数组解释为 UTF-8 字符串。

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2017-10-05
    • 2019-04-29
    • 2011-01-14
    • 2018-02-01
    • 2018-07-09
    • 2011-04-16
    • 2014-03-01
    • 2011-09-24
    相关资源
    最近更新 更多