.NET 中读取 appsettings.json 的编码陷阱:UTF-8 还是 GB2312?一次踩坑与避坑全记录

在 .NET 开发中,appsettings.json 是我们最常用的配置文件。通常,我们只需一行代码即可加载它:

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

现在读取配置文件中的节点(节点值含有中文),出现乱码
image

这是因为 appsetting.json 文件使用的是GB2312(ASNI)格式,而上述方式会默认以UTF8编码读取文件,从而导致中文出现乱码。

解决办法:

public static IConfigurationRoot configurationRoot_ASNIToUTF8 = BuildConfigurationWithEncoding();

        private static IConfigurationRoot BuildConfigurationWithEncoding()
        {
            // 1. 手动读取 GB2312 文件
            string jsonFilePath = Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json");
            string gb2312Content = File.ReadAllText(jsonFilePath, Encoding.GetEncoding("GB2312"));

            // 2. 将内容转换为 UTF-8 字节流
            byte[] utf8Bytes = Encoding.UTF8.GetBytes(gb2312Content);
            using var memoryStream = new MemoryStream(utf8Bytes);

            // 3. 使用内存流构建配置
            return new ConfigurationBuilder()
                .AddJsonStream(memoryStream)
                .Build();
        }

显式使用GB2312编码读取文件,将读取到的内容重新用 UTF-8 编码转为字节流,再重新构建配置。

posted @ 2025-10-16 16:47  solutide  阅读(16)  评论(0)    收藏  举报