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

在.NET Core应用中如何指定INI配置文件的编码以正确读取内容?

解决Windows-1250编码INI文件的配置读取问题

没问题,这个场景我之前处理过,其实.AddIniFile方法本身就支持指定文件编码,只是默认没显式使用而已。不过有个关键细节要注意:.NET Core默认只包含UTF-8、UTF-16这类通用编码,像Windows-1250这种特定代码页的编码需要额外引入包来支持。

步骤1:安装编码支持包

首先需要安装System.Text.Encoding.CodePages NuGet包,它提供了各种Windows代码页的编码支持。可以用以下命令安装:

  • 包管理器控制台:Install-Package System.Text.Encoding.CodePages
  • .NET CLI:dotnet add package System.Text.Encoding.CodePages

步骤2:注册编码提供器

在读取配置之前,需要先注册编码提供器,否则调用Encoding.GetEncoding(1250)会抛出找不到编码的异常。在Program.cs(或启动入口类)中添加以下代码:

using System.Text;

// 注册编码提供器,必须在读取配置前执行
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

步骤3:指定编码读取INI文件

现在就可以用带encoding参数的AddIniFile重载方法来读取Windows-1250编码的配置文件了:

var configBuilder = new ConfigurationBuilder()
    // 最后一个参数指定编码为Windows-1250
    .AddIniFile("appsettings.ini", optional: false, reloadOnChange: false, encoding: Encoding.GetEncoding(1250));

var configuration = configBuilder.Build();

// 现在读取带变音符号的配置值就不会乱码了
var mySpecialValue = configuration["SomeKeyWithDiacritics"];

备选方案:手动读取文件再加载

如果出于某些原因不想用重载方法,也可以手动读取文件内容,转换为UTF-8后通过流加载:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

// 用Windows-1250编码读取文件内容
var iniContent = File.ReadAllText("appsettings.ini", Encoding.GetEncoding(1250));
// 转换为UTF-8字节流
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(iniContent));

var configBuilder = new ConfigurationBuilder()
    .AddIniStream(stream);

var configuration = configBuilder.Build();

这个方法本质是先把非UTF-8的文件内容转换成UTF-8流,再让配置系统读取,效果和直接指定编码是一样的,但不如第一种方法简洁。

内容的提问来源于stack exchange,提问作者Jan Palas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:27:53