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
相关产品推荐
相关产品推荐

