【问题标题】:appsettings with special characters in .NET Core.NET Core 中带有特殊字符的应用设置
【发布时间】:2019-03-06 15:33:59
【问题描述】:

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

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

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

真实例子:

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

【问题讨论】:

  • 没有特殊字符。如果文件保存为 UTF8,.NET 会很好地读取它。证明就是这个问题 - StackOverflow 是一个 ASP.NET 站点,页面使用 UTF8 编码
  • 如果你得到奇怪的字符,这意味着文件是使用单字节代码页而不是 UTF8 保存的。再次将其保存为 UTF8。 .NET 的 File 方法使用 UTF8 作为默认文件编码
  • @habib 不相关。这不是关于反斜杠的问题

标签: c# .net-core


【解决方案1】:

JSON 要求 UTF-8 作为文件编码。您的文件很可能以其他编码保存,可能是 Codepage 1252。确保您将文件保存为 UTF-8,这样您的字符就可以使用。

不同的工具处理这个问题的方式不同。

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

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

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

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

【讨论】:

  • 就我而言,我只是使用上面提供的 PS 命令转换了我的文件。
【解决方案2】:

受到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>

我的配置服务:

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
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 2020-02-07
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多