Вопрос по node.js – Почему я не могу написать китайские символы в HTTP-ответе nodejs?

8

Вот мой маленький код:

<code>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);
</code>

Ранее я просто позволилres.end отправить "Привет, мир" и это сработало хорошо. Затем я захотел немного подстроиться и изменил «мир». в китайском эквиваленте "& # x4E16;" # # x754C; "и таким образом изменили" кодировку " & APOS; тип содержимого & APOS; в заголовке "utf-8". Но в Chrome и Firefox я вижу это:

<code>hello 涓栫晫
</code>

Тем не менее, удивительно опера (11.61) показывает правильный результатhello 世界, Я хочу знать, пропустил ли я что-то в коде и почему это происходит. Спасибо вам, ребята.

Я думаюэта почта похоже на мою ситуацию, но не совсем.

Ваш Ответ

3   ответа
0

涓栫晫 на самом деле世界 в кодировке GB-18030, а затем отображается как UTF-8. Вероятно, символы были сохранены в этой кодировке.

2

content-encoding это не набор символов, а кодировка самого ответа http

charset не обычный заголовок http

content-length здесь не нужно

как сказал @jjrv, ты должен написать'Content-Type': 'text/plain;charset=utf-8' там

Вы правы, в первую очередь я думал, как руководство говорит безcontent- length это будет пакет с фрагментами, и я думаю, что он не будет правильно отображать китайский символ. Но после добавления 'charset = utf-8' вContent-TypeЯ опустилcontent-length поле и все работало нормально. Allan Ruin
13

м изменением:

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

Протестировано с Chrome, Firefox и Safari.

Вы также можете заглянуть в пакет node.js & quot; express & quot; что позволяет переписать ваш код следующим образом:

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);
Твой гений !! Это правильно! Allan Ruin
ну, я знаю express и webjs, я просто пытаюсь выполнить то же упражнение и вдруг сталкиваюсь с этой странной проблемой ~ :) Allan Ruin

Похожие вопросы