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

基于SOAP的旧版ASMX Web API中含UTF-8字段的DataTable序列化乱码问题及解决方法咨询

嘿,我来帮你搞定这两个问题——UTF-8字段序列化乱码,还有旧版ASMX返回JSON的规范做法,直接上实用方案:

一、解决UTF-8序列化乱码的核心步骤

你遇到的乱码问题,本质是输出JSON时没有明确指定UTF-8编码,导致Response默认用了其他编码(比如GBK)解析你的JSON字符串,直接改这几步就能解决:

  1. 在输出JSON前,强制设置Response的内容类型和编码
  2. 确保序列化和输出的编码统一为UTF-8

给你修改后的主函数代码:

table = DbService.GetVlue(storedProcedurequery, Entry);

// 关键:先设置编码和内容类型,避免乱码
Context.Response.ContentType = "application/json; charset=utf-8";
Context.Response.ContentEncoding = System.Text.Encoding.UTF8;

string JSONString = JsonConvert.SerializeObject(table);
Context.Response.Write(JSONString);

二、更简便的通用处理方法

为了避免每次都重复写编码设置,你可以封装一个通用的JSON返回工具方法,以后直接调用就行:

public static void ReturnJson(HttpContext context, object data)
{
    // 统一设置UTF-8编码和JSON类型
    context.Response.ContentType = "application/json; charset=utf-8";
    context.Response.ContentEncoding = System.Text.Encoding.UTF8;
    
    // 序列化数据,Newtonsoft默认支持UTF-8
    string json = JsonConvert.SerializeObject(data);
    context.Response.Write(json);
}

然后主函数里只需要一行:

table = DbService.GetVlue(storedProcedurequery, Entry);
ReturnJson(Context, table);

额外注意点(从源头避免乱码)

  • 确保数据库中存储UTF-8字符的字段用nvarchar/ntext类型(不要用varchar),这样SqlDataAdapter读取时能正确获取Unicode数据
  • 如果你的存储过程返回的是varchar字段,建议改成nvarchar,避免存储阶段就出现乱码

内容的提问来源于stack exchange,提问作者user14723879

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:27:30