将字符串转换为UTF8

时间:2015-08-12 05:38:41

标签: c# email utf-8 persian

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

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

它有效,但无法转换某些字符:
实际上在web邮件界面中原始字符串是:

باسلام همکار گرامی شماره 53018 مربوط به دبیرخانه ستاد می باشد لطفا اصلاح فرمائید 

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

باس �?ا�? �?�?�?ار گرا�?�? �?ا�?�? ش�?ار�? 53018  �?رب�?ط ب�? د ب�?رخا�?�? ستاد �?�? باشد �?طفا اص�?اح فر�?ائ�?د�? 

任何想法?
更新: PS:输入变量的内容:

اÙزاÙØ´ تسÙÙÙات \r\n \r\n\r\n باس Ùا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´ÙارÙ

1 个答案:

答案 0 :(得分:0)

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

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);

所以对于这个输入:

اÙزاÙØ´ تسÙÙÙات \r\n\r\n\r\n<p>باسÙا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´ÙارÙ&nbsp;53018 &nbsp;ÙربÙØ· ب٠د بÙرخاÙ٠ستاد Ù٠باشد ÙØ·Ùا اصÙاح ÙرÙائÙد\r\n\r\n

我得到了正确的结果:

افزايش تسهيلات \r\n\r\n\r\n<p>باسلام همكار گرامي نامه شماره&nbsp;53018 &nbsp;مربوط به د بيرخانه ستاد مي باشد لطفا اصلاح فرمائيد\r\n\r\n \r\n\r\n

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

result = result.Replace('\r', ' ').Replace('\n', ' ').ToString();