Node.js / Express – 如何设置响应字符编码?

说我得到了:

app.get('/json', function(req, res) { res.set({ 'content-type': 'application/json' }).send('{"status": "0"}'); }); 

我试图发送响应为UTF-8与以下没有成功:

 app.get('/json', function(req, res) { // From Node.js Official Doc // http://nodejs.org/api/http.html#http_http_request_options_callback res.setEncoding('utf8'); res.set({ 'content-type': 'application/json' }).send('{"status": "0"}'); }); 

在Express中设置字符编码的正确方法是什么?

使用res.charset: http ://expressjs.com/api.html#res.charset

 res.charset = 'value'; res.send('some html'); // => Content-Type: text/html; charset=value 

但是,默认情况下JSON是UTF-8,所以你不需要设置任何东西。

如果您发现它没有被Express设置,您可能需要明确地将字符集添加到内容typesstring的末尾:

  res.set({ 'content-type': 'application/json; charset=utf-8' }) 

字符集并不总是自动设置, 并且需要设置为在任何地方正确工作(即,使用所有浏览器和所有ajax库),否则可能会遇到编码错误。

在Express 4.x特别是我发现,根据你试图返回的对象,它通常自动返回与content-type: application/json; charset=utf-8 当您调用res.json(someObject)content-type: application/json; charset=utf-8 ,但并不总是如此。

当在某些对象上调用res.json() ,它可以返回content-type: application/json (即没有字符集编码!)。 我不确定是什么触发了这个,除了它是关于返回的具体对象的东西。

我只注意到它是因为自动化testing显式地检查了头文件,发现它在某些响应中缺less字符集声明(即使内容types仍然是application/json )。

有类似的问题,我从数据库中收集瑞典字符,并将它们输出为JSON对象,当数据库中的字符不是UTF-8时,节点并不关心json是否必须是UTF-8。假设“你不需要设置任何东西”是错误的。 取决于你正在使用的字符集。