我正在通过S3方法将一个JSON字符串从我的nodejs服务器上传到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的字符串属性,我将如何修改此操作以保留表情符号字符。
在我的节点服务器上,我可以看到表情符号被存储在DB中,并得到了正确的服务。只有在上传之后,这些角色才会失去完整性。我认为有一些字符编码技巧,我可以应用到JSON.stringify结果,但我还不知道细节。在这里寻求帮助。
我在节点服务器上得到了JSON:

我在S3看到了JSON:

发布于 2017-08-30 18:59:43
正如zerkms所述,来自S3的文件中的字节与节点服务器的文件相同。问题是S3的web客户端没有告诉浏览器在从S3打开JSON文件时使用uft-8。因此,Chrome以屏幕截图显示的方式显示字节。
这一切都是真实和好的,但是,它无助于解决最初想要的结果,即从S3 web客户端看到表情符号。
修复方法是将charset=utf-8 添加到s3上传选项中,如:
s3.upload({
Bucket: myBucket,
Key: 'myPath/' + thing.id + '.json',
Body: JSON.stringify(thing),
ContentType: 'application/json;charset=utf-8'
})此外,设置ContentEncoding: 'utf-8'不会导致所需的行为,这是毫无价值的。
发布于 2017-08-30 00:39:14
在这种情况下没有真正的问题:数据上传正确,只是S3不提供编码(它根本不知道),google没有足够的上下文来猜测它的正确性。
发布于 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中,选项顺序非常重要。
https://stackoverflow.com/questions/45949940
复制相似问题