25

私が得たとしましょう:

app.get('/json', function(req, res) {
    res.set({
        'content-type': 'application/json'
    }).send('{"status": "0"}');
});

次のように応答をUTF-8として送信しようとしていますが、成功しませんでした:

app.get('/json', function(req, res) {
    // From Node.js Official Doc
    // http://nodejs.org/api/http.html#http_http_request_options_callback
    res.setEncoding('utf8');

    res.set({
        'content-type': 'application/json'
    }).send('{"status": "0"}');
});

Express で文字エンコーディングを設定する正しい方法は何ですか?

4

5 に答える 5

34

Express によってまだ設定されていない場合は、コンテンツ タイプ文字列の末尾に文字セットを明示的に追加することをお勧めします。

 res.set({ 'content-type': 'application/json; charset=utf-8' });

文字セットは常に自動的に設定されるとは限らず、どこでも (つまり、すべてのブラウザーとすべての ajax ライブラリで) 正しく機能するように設定する必要があります。そうしないと、エンコーディングのバグに遭遇する可能性があります。

特にExpress 4.xでは、返そうとするオブジェクトに応じて、通常content-type: application/json; charset=utf-8はを呼び出すと自動的に返されることがわかりましたがres.json(someObject)、常にではありません。

res.json()一部のオブジェクトを呼び出すと、返されることがありますcontent-type: application/json(つまり、文字セットのエンコーディングなしで!)。返される特定のオブジェクトに関するものであることを除いて、何がこれをトリガーするのか実際にはわかりません。

ヘッダーを明示的にチェックし、一部の応答で文字セット宣言が欠落していることを発見した自動テストのために、私はそれに気づいただけです(コンテンツタイプはまだでした application/json)。

于 2014-01-22T13:56:23.690 に答える
13

res.charset を使用: http://expressjs.com/api.html#res.charset

res.charset = 'value';
res.send('some html');
// => Content-Type: text/html; charset=value

ただし、JSON はデフォルトで UTF-8 であるため、何も設定する必要はありません。

于 2013-07-26T09:01:24.797 に答える
2

同様の問題があり、データベースからスウェーデン語の文字を収集して JSON オブジェクトとして出力しています。ノードは、データベースからの文字が UTF-8 でない場合、json が UTF-8 である必要があるかどうかを気にしません。 「何も設定する必要がない」と仮定すると、false になります。使用している文字セットに応じて。

于 2013-10-22T08:34:04.227 に答える