appsettings with special characters in .NET Core

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:

enter image description here

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

enter image description here

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

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.

Tags:

C#

.Net Core