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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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尚未设置,则可能需要在内容类型字符串的末尾显式添加字符集:

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

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

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

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

我只注意到它是因为自动化测试明确检查了标题并发现它在某些响应中缺少charset声明(即使内容类型仍然是application/json)。

另一答案

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

另一答案

在您去手动设置标头参数的麻烦之前,请检查您的服务器默认发送的内容。就我而言,我正在使用提供Node.js实例的“无服务器”云。显然,这些通常是前端w / nginx,我假设是基于默认设置设置一些这些东西。 ...我根本不需要res.set。当然,我正在回复HTML,...只是说 - 在你去修复之前,确保它已经破了。

accept-ranges: bytes
accept-ranges: bytes
cache-control: private
content-encoding: gzip
content-type: text/html; charset=utf-8
date: Fri, 21 Dec 2018 21:40:37 GMT
etag: W/"83-xwilN/BBLLLAAAHHH/0NBLAH0U"
function-execution-id: 5thvkjd4wwru
server: nginx
status: 200
vary: accept-encoding, cookie, authorization
via: 1.1 varnish
x-cache: MISS
x-cache-hits: 0
x-cloud-trace-context: 18c611BBBBLLLLAAAHHH9594d9;o=1
x-powered-by: Express
x-served-by: cache-dfw18631-DFW
x-timer: S15BBLLLAAHHH.913934,VS0,VE3404 

以上是关于Node.js / Express - 如何设置响应字符编码?的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中,如何使用 socket.io 和 express 设置 redis?具体使用 RedisStore()

Node.js + Express.js |尝试设置 HTTPS 服务器

如何通过express-session在node.js上设置持久性cookie?

如何在 express.js node.js 中设置 X-Frame-Options

如何设置cookies express、react.js

如何打包和部署Node.js + express Web应用程序?