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:
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
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.