Here is my little 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);
Previously I just let res.end
to send "hello world" and it worked well. Then I wanted to adjust a little bit and changed the 'world' into the Chinese equivalent '世界', and so changed the 'charset' 'content-type' in the header to 'utf-8'. But in Chrome and Firefox I see this:
hello 涓栫晫
However, amazingly opera(11.61) does show the correct result hello 世界
. I want to know whether I have missed something in the code, and why this is happening. Thank you guys.
I think this post is similiar with my situation but not exactly.
Problem is with the character set specification. For me it works with this change:
Tested with Chrome, Firefox and Safari.
You could also look into the node.js package "express" which allows rewriting your code like this:
content-encoding
is not a character set but a encoding of http response itselfcharset
is not a common http headercontent-length
is unneccesary hereas @jjrv said, you should write
'Content-Type': 'text/plain;charset=utf-8'
there涓栫晫
is actually世界
in encoding GB-18030, and then displayed as UTF-8. Probably the characters got saved in that encoding.