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

37

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

当我解析给定的配置部分时,对于那些值我会得到奇怪的字符。

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

真实例子:

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

2
没有特殊字符。如果文件保存为UTF8,.NET将可以很好地读取它。证明就是这个问题 - StackOverflow是一个ASP.NET网站,页面使用UTF8编码。 - Panagiotis Kanavos
如果你得到了奇怪的字符,那意味着该文件是使用单字节代码页而不是UTF8保存的。请将其重新保存为UTF8格式。.NET的File方法默认使用UTF8作为文件编码。 - Panagiotis Kanavos
1
@habib 不相关。这不是关于反斜杠的问题。 - Panagiotis Kanavos
2个回答

70

JSON规定文件编码必须为UTF-8。你的文件很可能是以其他编码方式保存的,可能是Codepage 1252。确保将文件保存为UTF-8,你的字符就可以正常工作。

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

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

enter image description here

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

enter image description here

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

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

1
在我的情况下,我只是使用上面提供的PS命令转换了我的文件。 - code5

3

深入了解微软配置的启发,我找到了一种解决方案。我的解决方案是将 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;
}

现在,丹麦字母ø的显示效果与预期相同。我希望您会发现这个有用。


我猜这个可行是因为你在文件中设置了编码为 utf-8。Json 支持吗?有趣的旁注是,我在我的 .netcore 3.1 api 中也遇到了相同的混乱,使用挪威语音符 ø。我们两种语言中的同一个字母。所以我需要小心我的 json 文件的编码,将它们设置为 utf-8。 - Tore Aurstad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接