appsettings with special characters in .NET Core

后端 未结 2 1042
灰色年华
灰色年华 2021-01-04 02:11

I have a small .NET Core console app which has an appsettings.json file containing different configuration sections and some of the values contain accents (for

相关标签:
2条回答
  • 2021-01-04 02:40

    JSON mandates UTF-8 as the file encoding. Your file is most likely saved in some other encoding, possibly Codepage 1252. Make sure you save the file as UTF-8 and your characters will work.

    Different tools handle this differently.

    For Notepad there's an Encoding selection in the Save dialog:

    Visual Studio has a Save with Encoding option in the Save dialog:

    You could also write a small program or script to do the conversion, e.g. the following PowerShell pipeline:

    (Get-Content appsettings.json) | Set-Content -Encoding Utf8 appsettings.json
    
    0 讨论(0)
  • 2021-01-04 02:51

    Inspired by Deep Dive into Microsoft Configuration, I found a solution. My solution is to combine the use of json and xml.

    In Your Program.cs, You need to add the load of xml. Example where I map settings to a POCO:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(AddDbConfiguration)
                .UseStartup<Startup>();
    
        private static void AddDbConfiguration(WebHostBuilderContext context, IConfigurationBuilder builder)
        {
            var configuration = builder.Build();
            builder.AddXmlFile("appsettings.xml");
        }
    

    My xml file:

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <ConfigSettings>
        <Database>Specialskolekørsel</Database>
        <SystemId>1</SystemId>
        <EnableAudit>True</EnableAudit>
        </ConfigSettings>
    </root>
    

    My ConfigureServices:

    public void ConfigureServices(IServiceCollection services)
    {
       services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
       services.Configure<ConfigSettings>(Configuration.GetSection(nameof(ConfigSettings)));
    }
    

    My Controller:

    public HomeController(IOptions<ConfigSettings> config)
    {
        Database = config.Value.Database;
    }
    

    Now the danish letter ø shows as expected. I hope You will find this useful.

    0 讨论(0)
提交回复
热议问题