如何在Google Assistant中正确显示欧元符号?actions-on-google SDK问题
嘿,这个问题我太熟悉了!在Node.js Lambda + Google Assistant的组合里输出特殊字符(比如€),经常会因为编码配置不到位踩坑,你大概率漏了这几个关键设置:
确保代码文件以UTF-8编码保存:大部分编辑器(VS Code、Sublime等)都能在状态栏切换编码,一定要选「UTF-8」(别带BOM)。如果你的.js文件用了GBK之类的其他编码,Node.js读取时会把€解析成乱码字符,自然没法正确显示在Google Assistant里。
给Lambda设置UTF-8环境变量:Lambda的默认运行环境可能没指定字符编码,你可以在Lambda控制台的「环境变量」里添加
LANG = en_US.UTF-8,或者直接在代码开头加一行:process.env.LANG = 'en_US.UTF-8';这会强制Node.js在输出内容时使用UTF-8,避免系统默认编码(比如ASCII)导致的转码错误。
配置API Gateway响应的Content-Type:进入API Gateway对应Webhook的端点设置,找到「集成响应」里的「Header Mappings」,添加
Content-Type的映射值为application/json; charset=UTF-8。API Gateway转发响应时,如果没明确指定字符集,很可能会把UTF-8字符转成其他编码,导致Google Assistant解析异常。备选方案:用Unicode转义序列代替硬编码:要是上面的配置还是没解决问题,直接用欧元符号的Unicode转义码
\u20AC代替代码里的€,比如:conv.ask('\u20AC');这种方式完全不受文件编码和环境的影响,能百分百确保符号正确显示。
内容的提问来源于stack exchange,提问作者duffn

