【问题标题】:.NET Core app configuration: Specify INI file encoding.NET Core 应用配置:指定 INI 文件编码
【发布时间】:2020-10-09 11:42:42
【问题描述】:

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

configBuilder.AddIniFile("appsettings.ini");

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

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

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

【问题讨论】:

    标签: .net .net-core configuration configuration-files


    【解决方案1】:

    使用 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);
                }
            }
        }
    }
    

    【讨论】:

    • 是的,我对StreamReader 很熟悉,但是我找不到在.NET Core 配置管道中使用它的方法(=我想通过configBuilder.AddIniFile("appsettings.ini") 添加配置文件,而不是通过手动文件解析。)
    • 你的ini文件的编码是什么?
    • 道歉:您说的是 Windows 1250 编码。
    【解决方案2】:

    这对我有用

    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();
    

    【讨论】:

    • AddIniStream 的好主意!我不知道这种方法...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2019-08-15
    • 2022-10-19
    • 2017-05-04
    • 2020-08-08
    相关资源
    最近更新 更多