.NET Core中带有特殊字符的appsettings

时间:2019-03-06 15:34:00

标签: c# .net-core

我有一个小型的.NET Core控制台应用程序,该应用程序有一个appsettings.json文件,其中包含不同的配置节,并且其中一些值包含重音符号(例如áó)。

当我解析给定的配置节时,我会得到那些奇怪的字符。

配置名称空间中是否有一个选项可以帮助正确解析字符串?

实际示例:

{
  "Loc": "https://www.mywebsite.com/image.jpg",
  "Caption": "Ocasión - Los mejores vehículos"
},

2 个答案:

答案 0 :(得分:3)

JSON强制使用UTF-8作为文件编码。您的文件很可能以其他编码方式保存,可能是Codepage1252。请确保将文件另存为UTF-8,并且字符可以正常工作。

不同的工具对此处理方式不同。

对于记事本,在“保存”对话框中有一个“编码” 选择:

Web Bluetooth API specification

Visual Studio在“保存”对话框中有一个“使用编码保存” 选项:

enter image description here

您还可以编写一个小程序或脚本来进行转换,例如以下PowerShell管道:

(Get-Content appsettings.json) | Set-Content -Encoding Utf8 appsettings.json

答案 1 :(得分:0)

Deep Dive into Microsoft Configuration的启发,我找到了解决方案。我的解决方案是结合使用json和xml。

在Program.cs中,您需要添加xml的负载。我将设置映射到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");
    }

我的xml文件:

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

我的ConfigureServices:

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

我的控制器:

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

现在,丹麦字母ø如预期显示。希望您会觉得有用。