C# 将十六进制值转换为utf-8字符
我正在使用IMAP类阅读电子邮件。当我的邮件正文包含ÖIMAP时,返回十六进制值:C# 将十六进制值转换为utf-8字符,c#,encoding,utf-8,hex,imap,C#,Encoding,Utf 8,Hex,Imap,我正在使用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); 我的想法是: Encod
=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);
我的想法是:
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);
其中decodedItem的预期值为Ö。但我真的不知道为什么Ö在IMAP中转换为=C3=96
,我不能将其发送到ToByte()
,因为=C3=96
不是真正的十六进制值
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);
我也尝试过这样做:
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);
Encoding enc = Encoding.GetEncoding("UTF-8);
System.Byte[] ch = new System.Byte[1];
ch[0] = 214;
var decodedItem = enc.GetString(ch);
但decodedItem中的值为=�
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);
U+00D6Öc3 96带分音符的拉丁文大写字母O
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);
这意味着您必须去掉“=”,然后将其转换为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);
我希望这有帮助
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);
Alex,这个符号实际上是两个字节(0xC3,0x96),但您只分配了一个,并且在那个位置分配了一个不同的字节(214=0xD6)
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);
为了进一步澄清,0xD6(214)实际上代表Unicode,而不是UTF-8,您可以通过更改调用和值来匹配Unicode值:
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);
Encoding enc = Encoding.GetEncoding("Unicode");
System.Byte[] ch = { 0xD6, 0x00 };
今天的大多数电子邮件中都没有Unicode。要获得Unicode文本,必须执行以下操作:
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);
- 查找消息的文本部分。可能有很多。请参阅RFC 3501中的
车身结构
- 检查MIME头文件(或
response)以了解所查看部件的BODYSTRUCTURE
内容传输编码。最常见的编码是
和引用的可打印
。有关详细信息,请参阅RFC 2045、2046、2047和2048base64
- 撤消
,以获得包含字节序列的ByTestStream内容传输编码
- 查看
标题,即内容类型
参数字符集
- 使用编解码器/charset/对字节流进行解码。。。你可以在上面找到
- 恭喜,您现在拥有了Unicode字符串
或者,使用一个库,该库用您喜欢的语言/框架实现这些函数。它们很多。已经是utf-8了。但是编码为文本而不是字节。这种编码被称为。现在你知道谷歌该怎么做了,“.net解码引用的可打印文本”。第一次击中是好的。
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);