关于c#:将字符串转换为UTF8

Transforming string to UTF8

我有一个通过C从电子邮件中收到的字符串,我希望以正确的格式显示它。我知道输入的编码是Encoding.Default,根据这个答案,我必须将其转换为utf8,所以我尝试了以下代码:

1
2
byte[] bytes = Encoding.Default.GetBytes(input);
string strResult = Encoding.UTF8.GetString(bytes);

它可以工作,但不能转换某些字符:实际上,在Web邮件界面中,原始字符串是:

1
?????? ????? ????? ????? 53018 ????? ?? ???????? ???? ?? ???? ???? ????? ???????

当我用代码转换字符串时,给出了以下结果:

1
??? ????? ???????? ??????? ??????? ??????? 53018  ??????? ??? ? ?????????? ???? ???? ???? ????? ?????? ???????????

有什么想法吗?更新:ps:输入变量的内容:

1
2
3
4
5
6
7
?§ù?2?§ù??a?3ùùù?§?a

 



 ?¨?§?3 ù?§ù ùùù?§?± úˉ?±?§ùù ù?§ùù ?′ù?§?±ù


最后解决了这个问题(+),如您所知,UTF-8代码单元值已经以16位代码单元的序列存储在C字符串中,因此我们应该验证每个代码单元都在一个字节的范围内,首先我们应该将这些值复制成字节,然后将新的UTF-8字节序列转换成UTF-16:

1
2
3
4
5
byte[] utf8Bytes = new byte[utf8String.Length];
for (int i=0;i<utf8String.Length;++i) {
      utf8Bytes[i] = (byte)utf8String[i];
}
var result  = Encoding.UTF8.GetString(utf8Bytes,0,utf8Bytes.Length);

所以对于这个输入:

1
2
3
4
5
6
7
8
?§ù?2?§ù??a?3ùùù?§?a





<p>
?¨?§?3ù?§ù ùùù?§?± úˉ?±?§ùù ù?§ùù ?′ù?§?±ù&nbsp;53018 &nbsp;ù?±?¨ù?· ?¨ù ?ˉ ?¨ù?±???§ùù ?3?a?§?ˉ ùù ?¨?§??ˉ ù?·ù?§ ?§?μù?§?- ù?±ù?§?|ù?ˉ

我得到了正确的结果:

1
2
3
4
5
6
7
8
?????? ???????





<p>
?????? ????? ????? ???? ?????&nbsp;53018 &nbsp;????? ?? ? ??????? ???? ?? ???? ???? ????? ???????

PS:为了删除额外的字符,我使用以下代码:

1
2
3
result = result.Replace('
'
, ' ').Replace('
'
, ' ').ToString();