javascript - 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!
解决方案
@thomas 所说的:您需要向浏览器发送一个标头,告诉它使用哪个字符集来呈现您的文本。
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
如果您不这样做,某些主机上的某些浏览器有时可能会正确呈现文本。但是你不应该依赖这个机会,尤其是对于纯文本。
专业提示:nodejs 作为一个平台的全部意义在于组织你对好的库的使用。Node 不是用来雕刻雕塑的木块,而是一组乐高积木:非常好的乐高积木。除非您想重新发明瘪胎,否则避免使用图书馆是没有意义的。您无法避免它们:您http
已经使用了该库。(是的,它是内置的,但它仍然是一个库。)
通过使用最少的库来学习很好。但是如果你想从你的文件系统中实际提供渲染的 html 或文件,你需要使用 express。
推荐阅读
- python - 如何在一个窗口中使用一个 selenium webdriver 进行多个浏览选项卡并单独访问它们?
- c++ - 包装 C++ 类时不完整的类型 GLFWwindow
- c# - 如何在c#中添加Rfc3339日期时间字符串以增加一秒
- python - 在固定宽度文本文件的多个位置添加分隔符的问题
- android - 如何将 Unity 应用程序集成到原生 android studio 项目中
- machine-learning - 什么是负采样方法使用 - sigmoid 或 softmax?
- amazon-web-services - AWS - {lambda function} 可能没有定义授权
- python - Python 3(Linux 和 Windows)中的 CPU 温度
- javascript - 如何使用 ES6 语法导入 pg-promise?
- mysql - 只允许每个 id 列有一次 true 吗?