将字符串转换为 UTF8
Transforming string to UTF8
我有一个通过 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 باس Ùا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´ÙارÙ
终于解决了问题(+),如你所知,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();
我有一个通过 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 باس Ùا٠ÙÙÙار گراÙÙ ÙاÙÙ Ø´ÙارÙ
终于解决了问题(+),如你所知,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();