9

ここに私の小さなコードがあります:

var http = require('http');
var port = 9002;
var host_ip = '<my_ip>';
http.createServer(function (req, res) {
    var content = new Buffer("Hello 世界", "utf-8")
    console.log('request arrived');
    res.writeHead(200, {
        'Content-Encoding':'utf-8',
        'charset' : 'utf-8',
        'Content-Length': content.length,
        'Content-Type': 'text/plain'});
    res.end(content.toString('utf-8'),'utf-8');
}).listen(port, host_ip);
console.log('server running at http://' + host_ip + ':' + port);

以前はres.end、「hello world」を送信するだけでうまくいきました。次に、少し調整したいと思い、「世界」を中国語の「世界」に変更したため、ヘッダーの「charset」「content-type」を「utf-8」に変更しました。しかし、Chrome と Firefox では次のように表示されます。

hello 涓栫晫

しかし、驚くべきことに、opera(11.61) は正しい結果を示していますhello 世界。コードで何かを見逃していないかどうか、またその理由を知りたいです。君たちありがとう。

この投稿は私の状況に似ていると思いますが、正確ではありません。

4

3 に答える 3

15

文字セットの仕様に問題があります。私にとっては、この変更で機能します:

'Content-Type': 'text/plain;charset=utf-8'

Chrome、Firefox、Safari でテスト済み。

次のようにコードを書き換えることができる node.js パッケージ「express」を調べることもできます。

var express=require('express');

var app=express.createServer();

app.get('/',function(req, res) {
    var content = "Hello 世界";

    res.charset = 'utf-8';
    res.contentType('text');
    res.send(content);
});

app.listen(9002);
于 2012-05-06T12:28:07.227 に答える
2

content-encoding文字セットではなく、http レスポンス自体のエンコーディング

charset一般的な http ヘッダーではありません

content-lengthここでは不要です

@jjrvが言ったように、'Content-Type': 'text/plain;charset=utf-8'そこに書くべきです

于 2012-05-06T12:38:15.713 に答える
0
于 2012-05-22T11:08:22.140 に答える