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因此有两个步骤:
-
通过引用的可打印规则创建字节数组say bytes [],即
- substring = NM映射到字节NM(其中NM是hex)(“N * 16 + M”)
- 任何其他字符映射到其ASCII字节(请注意,类似的q编码字具有_到空间的附加映射)
-
然后将字节数组解释为UTF-8字符串。