10

10 月 12 日更新:

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


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

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

函数结果变为:

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

当我编写一个函数来解析一些中文网站并检索它们的页面标题时,我遇到了这个问题。我设法将它们转换为 utf-8(我使用 needle 进行请求),并且 console.log(title) 正确显示了这些汉字。但是 context.succeed() 的结果就像上面的例子一样。在响应结果时,我应该如何处理这些非拉丁字符?

4

2 回答 2

4

来自 AWS Support(2015 年 8 月 10 日):

感谢您就有关 Lambda 和 UTF-8 的问题联系 AWS Support。

我们目前正在研究这个问题,因为其他客户已经引起了我们的注意。没有关于何时解决此问题或我们是否可以解决此问题的 eta。

于 2015-08-10T22:58:03.810 回答
1

如在AWS 文档 - 编程模型 (Node.js)中:

表示 Lambda 函数执行和所有回调成功完成。这是一般语法:

context.succeed (Object result); 

在哪里

对象result——提供函数执行的结果。提供的结果必须JSON.stringify兼容。此参数是可选的。您可以不带任何参数 ( succeed()) 调用此方法或传递null值 ( succeed(null))。如果 AWS Lambda 无法字符串化或遇到另一个错误,则会引发未处理的错误,并将 X-Amz-Function-Error响应标头设置为 Unhandled。

所以,你不能得到这样的结果:

Hello 世界!

因为,字符串Hello 世界!将被编码为 JSON。因此,它将返回:

"Hello 世界!"

如果您使用 AWS Lambda 控制台在浏览器中看到:

"Hello ������!"

结果的十六进制视图

实际上它是一个有效的 JSON,你只需要先解码然后处理它。

尝试运行这个:

exports.handler = function (event, context) {
  var jsonStr = JSON.stringify('Hello 世界!');
  console.log(jsonStr);
  console.log(JSON.parse(jsonStr));
  context.succeed('Hello 世界!');
};

日志结果将是:

2015-08-07T12:49:54.888Z    12345678-90ab-cdef-1234-567890abcdef    "Hello 世界!"
2015-08-07T12:49:54.889Z    12345678-90ab-cdef-1234-567890abcdef    Hello 世界!

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

于 2015-08-07T13:04:52.067 回答