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

Kodular Web组件发送波斯语文本至Google Sheets为空的问题求助

解决波斯语文本通过Google App Script doPost写入Google Sheets为空的问题

问题描述

向Google Sheets写入数据时,英文文本可正常更新,但波斯语文本在Google端接收为空字符串。使用doPost(e)函数实现数据传输,先后尝试普通Post Text Block和Post Text With Encoding Block,问题均未解决。

原代码:

function doPost(e) {

var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/**********tmk/edit#gid=150301410");

var sheet = ss.getSheetByName(e.parameter.sheet);

var customerID = e.parameter.customerID;

var name = e.parameter.name;

var gender = e.parameter.gender;

var consultantID = e.parameter.consultantID;

var phone = e.parameter.phone;

var city = e.parameter.city;

var dateOfBirth = e.parameter.dateOfBirth;

var satisfaction = e.parameter.satisfaction;

var referredIDs = e.parameter.referredIDs;

sheet.appendRow([customerID, name, gender, consultantID, phone, city, dateOfBirth, satisfaction, referredIDs]);

return ContentService.createTextOutput("Row with customerID " + customerID + " appended.");

}

解决方案

问题根源在于e.parameter对非ASCII字符(如波斯语)的解析依赖请求编码设置,若未明确指定UTF-8,会导致字符解析失败。以下两种方法可解决:

方法1:手动解析x-www-form-urlencoded格式的原始请求体

修改代码,直接读取原始POST数据并按UTF-8解码:

function doPost(e) {
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/**********tmk/edit#gid=150301410");
  var sheet = ss.getSheetByName(e.parameter.sheet);
  
  // 解析原始POST参数,处理UTF-8编码字符
  var postData = e.postData.contents;
  var params = {};
  postData.split('&').forEach(function(pair) {
    var parts = pair.split('=');
    if (parts.length === 2) {
      var key = decodeURIComponent(parts[0]);
      var value = decodeURIComponent(parts[1]);
      params[key] = value;
    }
  });
  
  var customerID = params.customerID;
  var name = params.name;
  var gender = params.gender;
  var consultantID = params.consultantID;
  var phone = params.phone;
  var city = params.city;
  var dateOfBirth = params.dateOfBirth;
  var satisfaction = params.satisfaction;
  var referredIDs = params.referredIDs;

  sheet.appendRow([customerID, name, gender, consultantID, phone, city, dateOfBirth, satisfaction, referredIDs]);

  return ContentService.createTextOutput("Row with customerID " + customerID + " appended.");
}

同时确保发送端的POST请求头设置为:Content-Type: application/x-www-form-urlencoded; charset=UTF-8

方法2:改用JSON格式传输数据

如果发送端支持,将参数打包为JSON字符串发送,代码改为解析JSON:

function doPost(e) {
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/**********tmk/edit#gid=150301410");
  
  // 解析JSON格式的POST数据
  var params = JSON.parse(e.postData.contents);
  var sheet = ss.getSheetByName(params.sheet);
  
  var customerID = params.customerID;
  var name = params.name;
  var gender = params.gender;
  var consultantID = params.consultantID;
  var phone = params.phone;
  var city = params.city;
  var dateOfBirth = params.dateOfBirth;
  var satisfaction = params.satisfaction;
  var referredIDs = params.referredIDs;

  sheet.appendRow([customerID, name, gender, consultantID, phone, city, dateOfBirth, satisfaction, referredIDs]);

  return ContentService.createTextOutput("Row with customerID " + customerID + " appended.");
}

发送端需设置请求头:Content-Type: application/json; charset=UTF-8,并将参数以JSON字符串形式发送(例如{"sheet":"Sheet1","name":"波斯语姓名",...})

原理说明

e.parameter默认依赖请求的Content-Type头判断编码,若未明确指定UTF-8,App Script会使用ISO-8859-1解析,导致波斯语这类UTF-8字符无法正确识别,最终变成空值。手动解析原始请求体并使用decodeURIComponent(或JSON解析)能强制按UTF-8处理字符,解决编码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:13:26