向Google表格Web应用脚本提交数据时挪威字符丢失问题
我完全懂这个痛点!Google Apps Script的Web App在处理带特殊字符(比如挪威语的å、æ、ø)的POST请求时,e.parameters确实会出现字符丢失或乱码的问题,但e.postData.contents里的原始数据是完好的——这是因为Google在自动解析参数时用的编码方式没处理好非ASCII字符。下面是我亲测有效的解决办法:
解决步骤
1. 绕过e.parameters,直接解析原始POST内容
别再依赖e.parameters提取数据了,直接读取e.postData.contents并手动解析,这样能保留所有特殊字符。根据你发送的POST数据格式,分两种情况处理:
情况1:表单格式(application/x-www-form-urlencoded)
如果你的请求是普通表单编码格式,用decodeURIComponent()解码原始内容,再拆分键值对:
function doPost(e) { // 解码原始POST内容,还原特殊字符 const rawDecodedData = decodeURIComponent(e.postData.contents); // 将解码后的字符串拆分成键值对对象 const parsedParams = rawDecodedData.split('&').reduce((result, pair) => { const [key, value] = pair.split('='); result[key] = value; return result; }, {}); // 现在parsedParams里的挪威字符完全正常了! Logger.log(parsedParams.yourFieldName); // 比如输出包含å/æ/ø的内容 // 示例:写入Google表格 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.appendRow([parsedParams.name, parsedParams.message]); // 返回成功响应 return ContentService.createTextOutput(JSON.stringify({ status: 'success', data: parsedParams })).setMimeType(ContentService.MimeType.JSON); }
情况2:JSON格式(application/json)
如果发送的是JSON数据,直接解析原始内容即可,因为JSON本身支持UTF-8编码:
function doPost(e) { // 直接解析原始JSON内容,特殊字符完好保留 const jsonData = JSON.parse(e.postData.contents); Logger.log(jsonData.note); // 正常显示å/æ/ø // 后续处理逻辑... return ContentService.createTextOutput(JSON.stringify({status: 'success'})) .setMimeType(ContentService.MimeType.JSON); }
2. 确保前端请求的编码正确
不管用哪种格式发送请求,都要保证前端对特殊字符做了正确编码:
- 如果是手动拼接表单数据,用
encodeURIComponent()对每个参数值编码:const formData = { name: 'Erlend', message: 'Jeg elsker åæø!' }; const encodedBody = Object.keys(formData) .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(formData[key])}`) .join('&'); - 更简单的方式是用
FormData对象,它会自动处理编码:const form = new FormData(); form.append('name', 'Erlend'); form.append('message', 'Jeg elsker åæø!');
3. 验证效果
部署Web App后,发送测试请求,然后:
- 查看脚本编辑器的「日志」(顶部菜单「查看」→「日志」),确认特殊字符正常显示
- 检查Google表格中写入的内容,确保å/æ/ø没有被剥离
内容的提问来源于stack exchange,提问作者Erlend
相关产品推荐
相关产品推荐

