首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用S3保存node.js文件中的表情符号字符

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

Stack Overflow用户
提问于 2017-08-29 23:58:24
回答 3查看 1.6K关注 0票数 2

我正在通过S3方法将一个JSON字符串从我的nodejs服务器上传到s3.upload中。

代码语言:javascript
复制
var s3 = new AWS.S3();

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

如果在上面的片段中,thing对象具有一个包含emojis的字符串属性,我将如何修改此操作以保留表情符号字符。

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

我在节点服务器上得到了JSON:

我在S3看到了JSON:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-30 18:59:43

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

这一切都是真实和好的,但是,它无助于解决最初想要的结果,即从S3 web客户端看到表情符号。

修复方法是将charset=utf-8 添加到s3上传选项中,如:

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

此外,设置ContentEncoding: 'utf-8'不会导致所需的行为,这是毫无价值的。

票数 5
EN

Stack Overflow用户

发布于 2017-08-30 00:39:14

在这种情况下没有真正的问题:数据上传正确,只是S3不提供编码(它根本不知道),google没有足够的上下文来猜测它的正确性。

票数 1
EN

Stack Overflow用户

发布于 2017-09-24 00:13:01

以防万一任何人都需要通过AWS:来做这件事

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

定期上载所有构建文件夹文件,但js除外,js包含utf-8 emoji字符。

然后

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

上传包含utf-8符号字符和utf-8编码的js文件。

*注意:在aws中,选项顺序非常重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45949940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档