2017-08-29 7 views
1

私のnodejsサーバーからJSON文字列をS3にs3.uploadメソッドでアップロードしています。S3ファイルのemoji文字をnode.jsで保存する方法

var s3 = new AWS.S3(); 

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

上記のスニペットでは、thingオブジェクトが絵文字を含む文字列プロパティを持っている場合、どのように私は絵文字を維持するために、この操作を変更します。

私のノードサーバーでは、絵文字がDBに格納されて正しく表示されていることがわかります。アップロード後、キャラクターは完全性を失います。私はJSON.stringifyの結果に適用できる文字エンコーディングのトリックがあると思いますが、詳細はまだ分かりません。ここで助けを求める。

JSON私は、ノードのサーバーで取得:

enter image description here

JSON私はS3で参照してください。

enter image description here

+0

で非常に重要なのですか?同じ文字列のように見え、正しく解釈されません。それで、2番目のスクリーンショットで何が解釈されますか? – zerkms

+0

この例は、私のnodejsサーバとS3で、ブラウザを介して見ていることを示しています。 –

+0

実際の問題は何ですか? S3からデータを取得してバイトを比較しようとしましたか?現時点では、問題が存在するかどうかを確認するために行ったことが明確ではありません。 – zerkms

答えて

3

zerkmsが述べるように、S3から来るファイルのバイトはノードサーバーのファイルと同じでした。問題はS3のWebクライアントが、S3からJSONファイルを開くときにuft-8を使用するようブラウザに指示していないことでした。その結果、Chromeはスクリーンショットに表示されるバイト数を示しました。

これはすべて真実ですが、S3 Webクライアントからのemojisを表示するという、元の結果を解決するのには役立ちません。

修正がそうのように、s3.uploadオプションにcharset=utf-8を追加しました:

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

さらに、それはContentEncoding: 'utf-8'を設定することが望ましい動作には至らなかった価値は何もありません。

+1

「utf-8」は*文字*エンコーディングであり、* content *エンコーディングではありません。 *「Content-Encoding」ヘッダフィールドは、 が表現に適用されたコンテンツコーディングを示します。 メディアタイプに固有のものを超えています。コンテンツコーディング値は、表現に適用されるエンコード変換を示します。 「 基礎となるメディアタイプのアイデンティティを失うことなく、情報を失うことなく表現を圧縮または変換することができるようにするために主に使用される です。」* - [RFC-7232](https://tools.ietf.org /html/rfc7231#section-3.1.2.1)。最も一般的には、 'gzip'です。 –

1

は、この非常に場合には本当の問題はありません。データが正しくアップロードされそれはS3がエンコーディング(それは単にそれを知らない)を提供していないだけで、Google Chromeはそれを正しく推測するのに十分なコンテキストを持っていません。

0

はIncaseの誰もが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ファイル*注:意味:オプションの順序は、 "S3の例JSONを" 何AWS-CLI

関連する問題