Why can't I write Chinese characters in nodejs HTTP response?

cjk, node.js, utf-8

Solution

Problem is with the character set specification. For me it works with this change:

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

Tested with Chrome, Firefox and Safari.

You could also look into the node.js package "express" which allows rewriting your code like this:

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

Problem

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.

Original source