Transforming string to UTF8
我有一个通过C从电子邮件中收到的字符串,我希望以正确的格式显示它。我知道输入的编码是
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ù?§ù ùùù?§?± úˉ?±?§ùù ù?§ùù ?′ù?§?±ù 53018 ù?±?¨ù?· ?¨ù ?ˉ ?¨ù?±???§ùù ?3?a?§?ˉ ùù ?¨?§?′?ˉ ù?·ù?§ ?§?μù?§?- ù?±ù?§?|ù?ˉ |
我得到了正确的结果:
1 2 3 4 5 6 7 8 | ?????? ??????? <p> ?????? ????? ????? ???? ????? 53018 ????? ?? ? ??????? ???? ?? ???? ???? ????? ??????? |
PS:为了删除额外的字符,我使用以下代码:
1 2 3 | result = result.Replace(' ', ' ').Replace(' ', ' ').ToString(); |