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 example á or ó).

When I parse a given configuration section I get weird chars back for those.

Is there an option in the configuration namespace that could help in parsing the string correctly?

Real example:

{ "Loc": "", "Caption": "Ocasión - Los mejores vehículos" }, 
3

2 Answers

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 
1

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.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy