Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将十六进制值转换为utf-8字符_C#_Encoding_Utf 8_Hex_Imap - Fatal编程技术网

C# 将十六进制值转换为utf-8字符

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

我正在使用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);
我的想法是:

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头文件(或
    BODYSTRUCTURE
    response)以了解所查看部件的
    内容传输编码。最常见的编码是
    引用的可打印
    base64
    。有关详细信息,请参阅RFC 2045、2046、2047和2048
  • 撤消
    内容传输编码
    ,以获得包含字节序列的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);