如何在AWS lambda中响应非拉丁字符?

时间:2015-07-10 15:04:24

标签: node.js amazon-web-services aws-lambda

10月12日更新:

现在问题已解决。有关详细信息,请参阅aws论坛中的this post

我写了一个nodejs函数,只是回复了一些汉字。但它以错误的字符回应。

exports.handler = function(event, context) {
    context.succeed('Hello 世界!');
};

功能结果变为:

"Hello ������������!"

当我编写一个函数来解析一些中文网站并检索他们的页面标题时,我遇到了这个问题。我设法将它们转换为utf-8(我为请求使用了针),并且console.log(标题)正确显示了那些中文字符。但context.succeed()的结果与上面的例子一样。在回复结果时,我该怎么做才能处理这些非拉丁字符?

2 个答案:

答案 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 世界!');
};

Hex view of result

实际上它是有效的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

解码后,您可以取回原始字符串。