ASP中解码360Dialog WhatsApp API Unicode转义字符问题
解决360Dialog WhatsApp Webhook希伯来语Unicode转义字符解码存储问题
问题根源
你遇到的核心问题是:360Dialog发送的JSON请求中包含JavaScript风格的\uXXXX Unicode转义字符,仅用ADODB.Stream转换字节编码为UTF-8,并未处理转义字符本身,导致数据库存储的是转义后的字符串而非实际希伯来语字符。
具体解决步骤
1. 完整解码请求体(二进制读取+转义字符处理)
先通过ADODB.Stream读取原始二进制流并转为UTF-8字符串,再手动解码\uXXXX格式的转义字符:
// 读取原始二进制请求体转UTF-8字符串 var stream = Server.CreateObject("ADODB.Stream"); stream.Type = 1; // 二进制模式 stream.Open(); stream.Write(Request.BinaryRead(Request.TotalBytes)); stream.Position = 0; stream.Type = 2; // 文本模式 stream.CharSet = "UTF-8"; var rawJson = stream.ReadText(); stream.Close(); // 解码Unicode转义字符 function decodeUnicode(str) { return str.replace(/\\u([0-9a-fA-F]{4})/g, function(match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); } var decodedJson = decodeUnicode(rawJson); // 解析为JSON对象(环境支持则优先用JSON.parse,避免eval注入风险) var jsonData = typeof JSON !== 'undefined' ? JSON.parse(decodedJson) : eval("(" + decodedJson + ")");
2. 确保数据库连接与字段配置正确
- 数据库表对应字段的字符集必须设置为utf8mb4(兼容全Unicode字符,含希伯来语)
- ADO连接字符串需指定UTF-8字符集,避免存储时编码转换错误:
var conn = Server.CreateObject("ADODB.Connection"); conn.Open("Provider=你的数据库驱动;DataBase=你的库名;User=账号;Password=密码;Charset=UTF-8");
3. 规避常见坑点
- 禁止用
Request.Form/Request.QueryString读取JSON请求,这类方法会用系统默认编码破坏UTF-8字符 - 若环境支持原生
JSON.parse,无需手动解码转义字符,它会自动处理\uXXXX格式 - 插入数据时直接传入解码后的字符串,不要二次转义
内容的提问来源于stack exchange,提问作者Noam Smadja
相关产品推荐
相关产品推荐

