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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:50:24