ASP.NET Core Web API读取JSON文件UTF-8编码乱码问题求助
解决ASP.NET Core Web API读取JSON文件的UTF-8编码问题
你的问题是读取JSON文件和返回响应时未明确指定UTF-8编码导致的:File.ReadAllTextAsync默认使用系统编码(非UTF-8)读取文件,Content方法返回内容时也未指定编码,最终造成特殊字符(如ã)乱码。
修复方案1:直接修正读取与返回的编码
修改代码,读取文件时指定UTF-8编码,返回Content时也明确指定UTF-8:
using Microsoft.AspNetCore.Mvc; using System.Text; namespace SGServer.Questionarios { [ApiController] [Route("[controller]")] public class AlvosController : ControllerBase { [HttpGet] public async Task<IActionResult> Get() { var jsonContent = await System.IO.File.ReadAllTextAsync("jsonTeste/alvos.json", Encoding.UTF8); return Content(jsonContent, "application/json", Encoding.UTF8); } [HttpGet("{idQuestionario}")] public async Task<IActionResult> GetIdQuestionario(int idQuestionario) { var jsonContent = await System.IO.File.ReadAllTextAsync("jsonTeste/questionarios.json", Encoding.UTF8); return Content(jsonContent, "application/json", Encoding.UTF8); } } }
修复方案2:使用JSON序列化(更规范的API实现)
直接返回JSON字符串并非ASP.NET Core Web API的最佳实践,建议将JSON文件反序列化为对象后通过Ok()方法返回,框架会自动处理UTF-8编码:
- 定义对应JSON结构的模型类(示例):
public class Alvo { public string Nome { get; set; } // 根据你的JSON结构添加其他属性 } public class Questionario { // 对应questionarios.json的属性定义 }
- 修改接口方法:
using Microsoft.AspNetCore.Mvc; using System.Text.Json; namespace SGServer.Questionarios { [ApiController] [Route("[controller]")] public class AlvosController : ControllerBase { [HttpGet] public async Task<IActionResult> Get() { var jsonBytes = await System.IO.File.ReadAllBytesAsync("jsonTeste/alvos.json"); var alvos = JsonSerializer.Deserialize<List<Alvo>>(jsonBytes); return Ok(alvos); } [HttpGet("{idQuestionario}")] public async Task<IActionResult> GetIdQuestionario(int idQuestionario) { var jsonBytes = await System.IO.File.ReadAllBytesAsync("jsonTeste/questionarios.json"); var questionarios = JsonSerializer.Deserialize<List<Questionario>>(jsonBytes); return Ok(questionarios); } } }
额外注意事项
确保你的JSON文件本身是用UTF-8编码保存的(避免使用ANSI等其他编码),可以通过记事本打开文件后选择"另存为",确认编码为UTF-8。
内容的提问来源于stack exchange,提问作者Duarte Leal
相关产品推荐
相关产品推荐

