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

.NET中HttpWebResponse返回字符串UTF-8字符显示为转义序列的问题

解决HttpWebResponse读取含重音字符时显示Unicode编码的问题

嘿,我之前处理Web响应的时候也踩过这个编码的大坑!这种情况几乎都是因为读取响应流时用错了编码导致的——当响应里包含é这类非ASCII字符时,如果用默认的编码(比如ASCII)去读,就会把UTF-8的多字节字符拆成乱码,最终显示成U+00E9这种Unicode转义序列。

下面给你几个靠谱的解决办法,按优先级来:

1. 优先从响应头获取正确编码

正规的Web响应会在Content-Type头里指定字符编码(比如Content-Type: text/html; charset=utf-8),我们应该直接用这个编码来读取流,而不是硬编码UTF-8:

using (var response = (HttpWebResponse)request.GetResponse())
{
    // 先从响应头提取编码,没有的话默认用UTF-8兜底
    Encoding targetEncoding = Encoding.UTF8;
    if (!string.IsNullOrEmpty(response.CharacterSet))
    {
        try
        {
            targetEncoding = Encoding.GetEncoding(response.CharacterSet);
        }
        catch (ArgumentException)
        {
            // 如果指定的编码不被支持,还是回退到UTF-8
            targetEncoding = Encoding.UTF8;
        }
    }

    using (var stream = response.GetResponseStream())
    using (var reader = new StreamReader(stream, targetEncoding))
    {
        string responseContent = reader.ReadToEnd();
        // 现在é这类字符应该能正常显示了
    }
}

2. 直接读取字节数组再用UTF-8解码

如果响应头没指定编码,或者你确定响应是UTF-8编码的,可以直接读取响应的字节数组,再用UTF-8解码:

using (var response = (HttpWebResponse)request.GetResponse())
using (var stream = response.GetResponseStream())
using (var memoryStream = new MemoryStream())
{
    // 把响应流全部复制到内存流
    stream.CopyTo(memoryStream);
    byte[] responseBytes = memoryStream.ToArray();
    
    // 用UTF-8解码字节数组
    string responseContent = Encoding.UTF8.GetString(responseBytes);
}

这种方法能避免StreamReader默认编码带来的问题,适合你确定响应编码是UTF-8的场景。

3. 排查编码不匹配的特殊情况

如果上面两种方法都不行,可能是响应本身用了其他编码(比如ISO-8859-1/Windows-1252),这时候可以尝试用这些编码解码试试:

// 尝试Windows-1252编码(西欧常用)
string content = Encoding.GetEncoding(1252).GetString(responseBytes);

为什么会出现U+00E9?

简单说:UTF-8里的é是两个字节(0xC3 0xA9),如果用ASCII编码去读这两个字节,会被解析成两个无效的ASCII字符,最终在字符串里显示为对应的Unicode转义序列U+00E9。只要用正确的编码读取,就能还原成正常的é。

内容的提问来源于stack exchange,提问作者john doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:51:05