You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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编码:

  1. 定义对应JSON结构的模型类(示例):
public class Alvo
{
    public string Nome { get; set; }
    // 根据你的JSON结构添加其他属性
}

public class Questionario
{
    // 对应questionarios.json的属性定义
}
  1. 修改接口方法:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:55:22