You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.5下波斯文HTML文本乱码解码问题求助

解决波斯文UTF-8乱码还原问题

你的问题出在当前的解码逻辑完全搞错了字节流的来源——你现在是把已经是UTF-16编码的.NET字符串直接拆成单字节,这和服务器返回的原始UTF-8字节流完全不是一回事,所以解码后还是乱码。

问题根源

你看到的乱码(جشن نوروز/جشن سال نو),本质是服务器返回的UTF-8字节被错误地用ISO-8859-1(或Windows-1252)编码解码成了字符串。要还原正确的波斯文,需要把这个乱码字符串先转回对应的字节数组(用ISO-8859-1编码),再用UTF-8解码。

正确的扩展方法

替换你当前的方法,用下面这段代码:

public static string FixUtf8Misdecoding(this string misdecodedString)
{
    // 把乱码字符串转回原始UTF-8字节(ISO-8859-1是单字节映射,能完整还原原始字节)
    byte[] utf8Bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(misdecodedString);
    // 用UTF-8解码字节数组得到正确字符串
    return Encoding.UTF8.GetString(utf8Bytes);
}

测试你的示例

把你给出的乱码字符串传入这个方法:

string messedUp = "جشن نوروز/جشن سال نو";
string fixedText = messedUp.FixUtf8Misdecoding();
// fixedText 会得到正确的波斯文:"جشن نوروز/جشن سال نو"

额外建议

如果是直接从服务器获取响应,尽量不要先把响应流转成字符串,而是直接读取原始字节数组,再用UTF-8解码,从根源避免编码错误:

// 示例:用HttpClient获取原始字节再解码
using (var client = new HttpClient())
{
    byte[] rawBytes = await client.GetByteArrayAsync("你的API地址");
    string correctText = Encoding.UTF8.GetString(rawBytes);
}

内容的提问来源于stack exchange,提问作者farshid torkaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:43:15