如何用node.js保存S3文件中的表情符号

我从我的nodejs服务器上传一个JSONstring到S3,通过s3.upload方法。

 var s3 = new AWS.S3(); s3.upload({ Bucket: myBucket, Key: 'myPath/' + thing.id + '.json', Body: JSON.stringify(thing), ContentType: 'application/json' }) 

如果在上面的代码片段中, thing对象有一个包含emojis的String属性,我将如何修改这个操作来保存emoji字符。

在我的节点服务器上,我可以看到表情符号被存储在数据库中并正确地服务。 只有在上传之后,angular色才会失去完整性。 我认为有一些字符编码技巧可以应用于JSON.stringify结果,但我还不知道细节。 在这里寻求帮助。

JSON我得到节点服务器:

在这里输入图像说明

JSON我在S3看到:

在这里输入图像说明

如zerkms所述,来自S3的文件中的字节与节点服务器的文件相同。 问题是,S3的Web客户端在S3打开JSON文件时并没有告诉浏览器使用uft-8。 因此,Chrome以屏幕截图显示的方式显示了字节。

这一切都是真实的,但是,它并没有帮助解决原来的期望的结果,这是从S3 Web客户端看到表情符号。

解决的办法是将charset=utf-8添加到s3.upload选项中,如下所示:

 s3.upload({ Bucket: myBucket, Key: 'myPath/' + thing.id + '.json', Body: JSON.stringify(thing), ContentType: 'application/json;charset=utf-8' }) 

另外,设置ContentEncoding: 'utf-8'不会导致所需的行为。

在这种情况下没有真正的问题:数据正确上传,它只是S3不服务的编码(它根本不知道它)和谷歌浏览器没有足够的上下文来猜测它的权利。

成为任何人都需要通过AWS cli来做到这一点:

aws s3 sync ./build s3://your-s3-bucket --exclude "*.js"

定期上传所有生成的文件夹文件,除了包含utf-8表情符号字符的js

然后

aws s3 sync --content-type "text/html; charset=utf-8" ./build s3://your-s3-bucket --exclude "*" --include "*.js"

用utf-8编码上传包含utf-8表情符号字符的js文件

*注意:select订单在aws-cli中非常重要