我有一个通过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 باس Ùا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´ÙارÙ
答案 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>باسÙا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´Ùار٠53018 ÙربÙØ· ب٠د بÙرخاÙ٠ستاد Ù٠باشد ÙØ·Ùا اصÙØ§Ø ÙرÙائÙد\r\n\r\n
我得到了正确的结果:
افزايش تسهيلات \r\n\r\n\r\n<p>باسلام همكار گرامي نامه شماره 53018 مربوط به د بيرخانه ستاد مي باشد لطفا اصلاح فرمائيد\r\n\r\n \r\n\r\n
PS:为了删除多余的字符,我使用以下代码:
result = result.Replace('\r', ' ').Replace('\n', ' ').ToString();