如何让UrlFetchApp POST输出与Logger.log一致的可读Unicode文本?
解决Google Apps Script POST时Unicode转义问题
问题根源在于JSON.stringify()默认会把非ASCII字符转成\uXXXX格式的Unicode转义序列,而Logger.log直接输出原始字符串的可读形式,导致发送内容和日志显示不一致。当你把转义后的JSON字符串作为payload发送时,接收端自然收到转义格式的内容。
解决方案一(推荐):让UrlFetchApp自动处理序列化
直接将对象作为payload传入,无需手动调用JSON.stringify(),UrlFetchApp会自动完成JSON序列化并以UTF-8编码发送,不会转义非ASCII字符:
var result = UrlFetchApp.fetch(urlA).getContentText(); Logger.log(result); var payload = {content: result}; // 直接传入对象 var params = { method: "POST", payload: payload, muteHttpExceptions: true, contentType: "application/json; charset=utf-8" // 明确指定UTF-8编码 }; UrlFetchApp.fetch(urlB, params);
解决方案二:手动控制JSON序列化行为
如果必须手动生成JSON字符串,可以通过自定义replacer函数保留原始Unicode字符:
var result = UrlFetchApp.fetch(urlA).getContentText(); Logger.log(result); // 自定义replacer,避免转义非ASCII字符 function preserveUnicode(key, value) { return typeof value === 'string' ? value : value; } var payload = JSON.stringify({content: result}, preserveUnicode); var params = { method: "POST", payload: payload, muteHttpExceptions: true, contentType: "application/json; charset=utf-8" }; UrlFetchApp.fetch(urlB, params);
或者对JSON.stringify的结果做反向替换(注意:此方法可能破坏原本需要转义的特殊字符,仅在确定无特殊转义需求时使用):
var payload = JSON.stringify({content: result}).replace(/\\u([0-9a-fA-F]{4})/g, function(match, code) { return String.fromCharCode(parseInt(code, 16)); });
内容的提问来源于stack exchange,提问作者Private Flashman
相关产品推荐
相关产品推荐

