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

Visual Studio项目字符编码异常:UTF8文本被ASCII渲染求助

解决C#应用中Web API返回文本的HTML实体渲染问题

你遇到的不是ASCII编码渲染问题,而是HTML实体双重编码导致的显示异常——"'"是两次HTML转义的结果(第一次把单引号转成',第二次又把&转成&,最终变成',再加上外层的")。以下是具体解决方法:

直接解码HTML实体

根据你使用的.NET版本选择对应的解码方法:

1. .NET Framework(需引用System.Web程序集)

使用System.Web.HttpUtility.HtmlDecode处理:

// 示例API返回的编码文本
string encodedText = ""'"";
// 第一次解码处理&转义
string firstDecode = System.Web.HttpUtility.HtmlDecode(encodedText);
// 第二次解码处理单引号的实体
string decodedText = System.Web.HttpUtility.HtmlDecode(firstDecode);
// 最终得到:"'";

2. .NET Core/.NET 5+(无需额外引用)

使用System.Net.WebUtility.HtmlDecode:

string encodedText = ""'"";
string firstDecode = System.Net.WebUtility.HtmlDecode(encodedText);
string decodedText = System.Net.WebUtility.HtmlDecode(firstDecode);

从根源避免问题

  1. 检查API响应头:确保API返回的Content-Type为text/plain; charset=utf-8,而非text/html。如果是text/html,客户端可能会误将纯文本当作HTML解析,保留实体编码。
  2. 确认下载时的编码:下载响应内容时明确指定UTF-8编码,避免默认编码导致的乱码(不过你的问题核心是实体编码,此步骤为辅助验证):
using (HttpClient client = new HttpClient())
{
    var response = await client.GetAsync("你的API地址");
    response.EnsureSuccessStatusCode();
    // 明确以UTF-8读取响应
    var responseBody = await response.Content.ReadAsStringAsync();
    // 再进行实体解码
    var decodedText = System.Net.WebUtility.HtmlDecode(responseBody);
}
  1. 排查API端:如果客户端解码后仍有异常,大概率是API端对文本进行了多次HTML转义,建议修改API逻辑,直接返回未转义的UTF-8纯文本。

内容的提问来源于stack exchange,提问作者P-dog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:35:50