【发布时间】:2015-08-12 05:38:40
【问题描述】:
我有一个通过 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 باس ÙØ§Ù ÙÙÙØ§Ø± گراÙÙ ÙØ§ÙÙ Ø´ÙØ§Ø±Ù
【问题讨论】:
-
那么,您已经有了一个看起来有效的字符串?它在生成的电子邮件中呈现得很糟糕吗?这是您的电子邮件未使用 utf8 编码的问题吗?
-
您的第一行以默认方案(可能不是 UTF8)生成字节数组编码输入。您的第二行尝试使用另一种方案(UTF8)解码该字节数组,因此它变成了无意义的字符。如果你想要的是 UTF8 中的字节数组编码输入,那么你应该使用
Encoding.UTF8.getBytes -
“默认编码”是 ansi 编码,无法处理提供的字符。
Encoding.Default总是是个糟糕的选择。 -
我建议在 webmail 界面中查看完整的电子邮件标头以找出答案。
-
请发布
input变量的内容。如果它显示正确,则无需转换任何内容。如果它包含奇怪的字符,它将被读取为带有错误代码页的 ASCII。问号或方框表示在转换过程中丢失了字符。