基于SOAP的旧版ASMX Web API中含UTF-8字段的DataTable序列化乱码问题及解决方法咨询
嘿,我来帮你搞定这两个问题——UTF-8字段序列化乱码,还有旧版ASMX返回JSON的规范做法,直接上实用方案:
一、解决UTF-8序列化乱码的核心步骤
你遇到的乱码问题,本质是输出JSON时没有明确指定UTF-8编码,导致Response默认用了其他编码(比如GBK)解析你的JSON字符串,直接改这几步就能解决:
- 在输出JSON前,强制设置Response的内容类型和编码
- 确保序列化和输出的编码统一为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
相关产品推荐
相关产品推荐

