.NET 中读取 appsettings.json 的编码陷阱:UTF-8 还是 GB2312?一次踩坑与避坑全记录
在 .NET 开发中,appsettings.json 是我们最常用的配置文件。通常,我们只需一行代码即可加载它:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
现在读取配置文件中的节点(节点值含有中文),出现乱码

这是因为 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 编码转为字节流,再重新构建配置。

浙公网安备 33010602011771号