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

使用async await编写代码遇System.InvalidOperationException错误求助

解决"ISO-8859-2"编码不支持导致的InvalidOperationException异常

这个问题我之前也碰到过,本质是.NET默认的编码库没有包含ISO-8859-2(也就是Latin-2)这类非通用编码的支持,所以当你的异步代码尝试用这个字符集读取响应内容时,就会抛出你看到的System.InvalidOperationException和ArgumentException。

解决起来分两步:

  1. 安装编码扩展包
    首先需要安装System.Text.Encoding.CodePages NuGet包,这个包提供了.NET默认没有包含的大量编码支持,包括ISO-8859系列。

    • 如果用Visual Studio,可以通过NuGet包管理器搜索安装;
    • 如果用命令行,.NET Core/.NET 5+执行:dotnet add package System.Text.Encoding.CodePages;
    • 传统.NET Framework执行:Install-Package System.Text.Encoding.CodePages
  2. 注册编码提供器
    在你的代码启动的早期位置(比如Main方法开头,或者异步方法执行前),注册编码提供器,这样.NET就能识别ISO-8859-2编码了:

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

给你一个修改后的完整异步代码示例:

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // 先注册编码提供器,这一步必须在读取内容前执行
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        
        try
        {
            using var httpClient = new HttpClient();
            var response = await httpClient.GetAsync("你的目标请求URL");
            // 现在读取内容时就能正确识别ISO-8859-2编码了
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"异常信息: {ex.Message}");
        }
    }
}

这样修改之后,你的代码应该就能正常读取使用ISO-8859-2编码的内容,不会再抛出那个异常了。

内容的提问来源于stack exchange,提问作者Karol Pisarzewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:29