我正在使用IMAP课程来阅读电子邮件。当我的邮件正文包含ÖIMAP时,返回十六进制值:=C3=96
。如何将其转换为utf-8Ö?
我在想:
Encoding enc = Encoding.GetEncoding("UTF-8);
System.Byte[] ch = new System.Byte[1];
ch[0] = System.Convert.ToByte([hex value of Ö], 16);
var decodedItem = enc.GetString(ch);
decodeItem的期望值是Ö。但我真的不知道为什么Ö在IMAP中转换为=C3=96
而我无法将其发送到ToByte()
,因为=C3=96
不是真正的十六进制值。
我也尝试过这样做:
Encoding enc = Encoding.GetEncoding("UTF-8);
System.Byte[] ch = new System.Byte[1];
ch[0] = 214;
var decodedItem = enc.GetString(ch);
但decodeItem中的值是=
答案 0 :(得分:2)
该符号实际上是两个字节(0xC3,0x96),但您只分配一个,而另一个(214 = 0xD6)......
Encoding enc = Encoding.GetEncoding("UTF-8");
System.Byte[] ch = { 0xC3, 0x96 };
var decodedItem = enc.GetString(ch);
为了进一步澄清,0xD6(214)实际上是用于Unicode,而不是UTF-8,你可以通过更改调用和值来匹配Unicode值来实现它:
Encoding enc = Encoding.GetEncoding("Unicode");
System.Byte[] ch = { 0xD6, 0x00 };
答案 1 :(得分:1)
http://www.utf8-chartable.de/ U +00D6Öc396带有DIAERESIS的LATIN CAPITAL LETTER
这意味着您必须取走'='然后将其转换为UTF 8
我希望这会有所帮助。
问候亚历克斯
答案 2 :(得分:1)
在今天的大多数电子邮件中都没有Unicode。要获得Unicode文本,您必须执行以下操作:
BODYSTRUCTURE
。BODYSTRUCTURE
响应),找出您正在查看的部件的Content-Transfer-Encoding
。最常见的编码是quoted-printable
和base64
。有关详细信息,请参阅RFC 2045,2046,2047和2048. Content-Transfer-Encoding
,以便到达包含字节序列的字节流。Content-Type
标题,charset
参数。或者,使用在您喜欢的语言/框架中实现这些功能的库。有很多。