这是我的小代码:
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''内容类型'改为'utf-8'。但在Chrome和Firefox中,我看到了这一点:
hello 涓栫晫
然而,令人惊讶的是,歌剧(11.61)确实显示了正确的结果hello 世界
。我想知道我是否错过了代码中的某些内容,以及为什么会发生这种情况。谢谢你们。
我认为this post与我的情况相似,但并不完全相同。
答案 0 :(得分:13)
问题在于字符集规范。对我来说,这适用于这种变化:
'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);
答案 1 :(得分:2)
content-encoding
不是字符集,而是http响应本身的编码
charset
不是常见的http标头
content-length
在这里是不必要的
正如@jjrv所说,你应该在那里写'Content-Type': 'text/plain;charset=utf-8'
答案 2 :(得分:0)
涓栫晫
实际上是世界
,然后显示为UTF-8。可能这些字符是以该编码保存的。