首页 > 解决方案 > node.js 中显示的 utf-8 字符不正确,如何解决?

问题描述

我是 node.js 的初学者,我尝试设置一个 HTTP 服务器。我来自 web Javascript,我对 node.js 知之甚少。我尝试了来自 nodejs.org 的代码,它有效,但是当我尝试像“á”或“Š”这样的字符时,它显示不正确。

我尝试使用 express.js 之类的库,它解决了问题,但我是普通的 - 我不喜欢库,而且事实证明我什至很难显示具有不同 URL 的不同页面。

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Vítejte na mojí webové stránce!');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

结果:VĂtejte na mojĂ webovĂ© stránce!

标签: javascriptnode.jsutf-8character-encoding

解决方案


@thomas 所说的:您需要向浏览器发送一个标头,告诉它使用哪个字符集来呈现您的文本。

res.setHeader('Content-Type', 'text/plain; charset=utf-8');

如果您不这样做,某些主机上的某些浏览器有时可能会正确呈现文本。但是你不应该依赖这个机会,尤其是对于纯文本。

专业提示:nodejs 作为一个平台的全部意义在于组织你对好的库的使用。Node 不是用来雕刻雕塑的木块,而是一组乐高积木:非常好的乐高积木。除非您想重新发明瘪胎,否则避免使用图书馆是没有意义的。您无法避免它们:您http已经使用了该库。(是的,它是内置的,但它仍然是一个库。)

通过使用最少的库来学习很好。但是如果你想从你的文件系统中实际提供渲染的 html 或文件,你需要使用 express。


推荐阅读