现在问题已解决。有关详细信息,请参阅aws论坛中的this post。
我写了一个nodejs函数,只是回复了一些汉字。但它以错误的字符回应。
exports.handler = function(event, context) {
context.succeed('Hello 世界!');
};
功能结果变为:
"Hello ������������!"
当我编写一个函数来解析一些中文网站并检索他们的页面标题时,我遇到了这个问题。我设法将它们转换为utf-8(我为请求使用了针),并且console.log(标题)正确显示了那些中文字符。但context.succeed()的结果与上面的例子一样。在回复结果时,我该怎么做才能处理这些非拉丁字符?
答案 0 :(得分:4)
来自AWS Support(2015年8月10日):
感谢您提出有关您的问题的AWS Support Lambda和UTF-8。
我们正在研究这个问题,就像其他客户一样 这引起了我们的注意。这将是没有eta 解决了,或者这是我们可以解决的问题。
答案 1 :(得分:1)
与AWS Documentation - Programming Model (Node.js)中一样:
表示Lambda函数执行和所有回调已完成 成功。这是一般语法:
result
,其中
Object
JSON.stringify
- 提供函数执行的结果。该 提供的结果必须与succeed()
兼容。这个参数是 可选的。您可以在没有任何参数的情况下调用此方法(null
) 或传递succeed(null)
值(X-Amz-Function-Error
)。如果AWS Lambda无法进行字符串化 或者遇到另一个错误,抛出一个未处理的错误Hello 世界!
响应标头设置为Unhandled。
所以,你不能得到这样的结果:
Hello 世界!
因为,字符串"Hello 世界!"
将被编码为JSON。所以,它将返回:
"Hello ������!"
如果您在浏览器中看到使用AWS Lambda控制台:
exports.handler = function (event, context) {
var jsonStr = JSON.stringify('Hello 世界!');
console.log(jsonStr);
console.log(JSON.parse(jsonStr));
context.succeed('Hello 世界!');
};
实际上它是有效的JSON ,您只需先解码然后再处理它。
尝试运行:
2015-08-07T12:49:54.888Z 12345678-90ab-cdef-1234-567890abcdef "Hello 世界!"
2015-08-07T12:49:54.889Z 12345678-90ab-cdef-1234-567890abcdef Hello 世界!
日志结果将是:
Get-Recipient -ResultSize Unlimited | select DisplayName,{$_.EmailAddresses -like 'smtp:*'} | Export-csv $ExportPath\AlleMailAdressen-$DateTime.csv
解码后,您可以取回原始字符串。