.NET Core 应用程序配置:指定 INI 文件编码

.NET Core app configuration: Specify INI file encoding

在我的应用程序启动期间,我从 INI 文件中读取配置值:

configBuilder.AddIniFile("appsettings.ini");

但是,appsettings.ini 的编码不同于 UTF-8(在我的例子中是 Windows-1250)。因此,所有包含变音符号的配置值都存在问题。

有没有办法指定配置文件的编码,以便正确读取所有配置值?

(在我的情况下无法更改 appsettings.ini 的编码。)

使用 StreamReader 可能会有所帮助,因为您可以在读取文件时指定编码。有不同的编码可供选择(UTF8、Unicode 等)。下面的 .NET Core 控制台应用程序示例:

using System;
using System.IO;
using System.Text;

namespace ConsoleDiacritic
{
    public class Program
    {
        static void Main(string[] args)
        {
            ReadFile();
        }

        private static void ReadFile()
        {
            string sourceFile = @"c:\temp\appsettings.ini";

            using (var filestream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, useAsync: true))
            {
                using var streamReader = new StreamReader(filestream, Encoding.UTF8);
                string lines = streamReader.ReadToEnd();

                Console.WriteLine(lines);
            }
        }
    }
}

这是适合我的方法

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var configText = File.ReadAllText("config2.ini", Encoding.GetEncoding("windows-1250"));
var ms = new MemoryStream();
ms.Write(Encoding.Default.GetBytes(configText));
ms.Position = 0;

IConfiguration config = new ConfigurationBuilder()
              .AddIniStream(ms)
              .Build();

ms.Dispose();