【问题标题】:How to get UTF-8 in Node.js?如何在 Node.js 中获取 UTF-8?
【发布时间】:2013-04-28 20:05:50
【问题描述】:

如何在我的 API 上获得 UTF-8 支持? 目前,一个字符串输出如下:

name: "John D�m"

代替:

name: "John Döm"

在下面检查 app.js:

var express = require('express'),
    driver = require('./driver');

var app = express();

app.configure(function () {
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
});

app.get('/drivers', driver.findAll);

app.listen(3000);
console.log('Up: http://127.0.0.1:3000/');

【问题讨论】:

  • JS 中的所有字符串都是 UTF8 除非明确设置为其他内容,因此很难说您的错误来自哪里。 driver 是做什么的?您提供的代码是标准样板文件,并没有真正的帮助。
  • driver 从 mongoDB 中获取所有驱动程序并将所有数据打印出来。请参阅此处的链接:xn--billstrm-t4a.se:1337
  • @loganfsmyth driver = require('./driver'); 和这个差不多:gist.github.com/ccoenraets/3819468#file-wines-js
  • 我的猜测是您的数据库中的数据不是 UTF8。您是如何填充数据库的?

标签: node.js encoding utf-8 character-encoding


【解决方案1】:

连接到您的响应生成器或创建执行以下操作的中间件:

res.header("Content-Type", "application/json; charset=utf-8");

否则浏览器会以他喜欢的编码显示内容。

如果这对您没有帮助,DB 可能编码错误。

编辑:由于答案已有近 5 年的历史,因此 API 发生了变化。对于当前的 node.js 版本,使用:

res.setHeader("Content-Type", "application/json; charset=utf-8");

【讨论】:

  • res.charset = 'utf-8' 是一回事,对吧?我觉得它更干净
  • res.charset 对我不起作用(nodejs 0.10.8),但这种 json 样式有效:pastebin.com/NwcVEAra
  • 这个答案仍然正确吗? ...我在编写代码时遇到了困难...我不断得到 � 标记...
  • @D.Tate 的答案仍然正确。 “utf-8”取决于数据源的编码。
  • 嗨,我不使用数据库并且想避免与 writeHead 一起使用,但我得到TypeError: res.header is not a functionerror。然后用这个解决了这个问题:res.setHeader('content-type', 'text/html; charset=utf-8'); text/html 部分是关于我的代码,它适用于 application/json
【解决方案2】:

我无法通过设置内容类型来解决这个问题。我用编码功能解决了这个问题。

res.cookie('someCookie', someCookie, {
  encode: c => c,
});

欲了解更多信息:express cookie

ExpressJS 版本:4.16.4

【讨论】:

    【解决方案3】:

    我的问题解决了:

    res.writeHeader(200 , {"Content-Type" : "text/html; charset=utf-8"});

    【讨论】:

    • 这可能会导致问题,如果您想返回内容但不是200 的 HTTP 状态代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2011-08-08
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多