Nodejs 为什么返回的网页里都是乱码呀
Nodejs 为什么返回的网页里都是乱码呀
var http = require(‘http’); var querystring = require(‘querystring’); var server = http.createServer(function(req, res) { var post = ‘’; req.on(‘data’, function(chunk) { post += chunk; }); req.on(‘end’, function() { post = querystring.parse(post); console.log(text); res.write(post.title); res.write(post.text); res.end(); }); }).listen(3000);
Node.js 为什么返回的网页里都是乱码呀
在使用 Node.js 编写 Web 应用时,如果返回的网页内容出现乱码问题,通常是因为字符编码设置不正确。下面我将通过一个简单的例子来解释这个问题,并展示如何解决。
示例代码
var http = require('http');
var querystring = require('querystring');
var server = http.createServer(function(req, res) {
var post = '';
req.on('data', function(chunk) {
post += chunk;
});
req.on('end', function() {
post = querystring.parse(post);
// 正确输出数据
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.write(post.title || '');
res.write(post.text || '');
res.end();
});
}).listen(3000);
解释
-
字符编码问题:
- 当从客户端接收数据并准备发送给客户端时,如果没有正确设置字符编码(如 UTF-8),可能会导致浏览器无法正确解析返回的数据,从而显示为乱码。
-
设置响应头:
- 在
res.writeHead
方法中,我们设置了响应头Content-Type: text/html; charset=utf-8
。这告诉浏览器返回的数据是 HTML 类型,并且使用 UTF-8 编码。 - 这一步非常关键,确保了浏览器能够正确解析和显示返回的内容。
- 在
-
处理空值:
- 在实际应用中,可能有时
post.title
或post.text
为空。为了避免错误,我们可以使用|| ''
来提供一个默认空字符串,这样即使这些字段不存在也不会引发错误。
- 在实际应用中,可能有时
-
数据拼接:
- 使用
res.write()
方法可以分多次写入数据到响应体中,最后调用res.end()
结束响应。
- 使用
总结
通过正确设置响应头中的字符编码,可以有效避免乱码问题。确保在处理 HTTP 响应时,合理地设置 Content-Type
和 charset
属性,可以使你的 Node.js 应用更好地与前端交互,提供良好的用户体验。
res.writeHead(200,{“Content-Type”:“text/html;charset:UTF-8”}); 这样试试看
改了以后还是不行…… <!DOCTYPE> <html> <head> <meta charset=‘tuf-8’> <title>Change</title> <style type=“text/css”> </style> <script type=“text/javascript”> </script> </head> <body> <form method=“post” action=“http://localhost:3000/”> <input type=“text” name=“title” /> <textarea name=“text”></textarea> <input type=“submit” /> </form> </form> </body> </html>
var http = require(‘http’); var querystring = require(‘querystring’); var server = http.createServer(function(req, res) { var post = ‘’; req.on(‘data’, function(chunk) { post += chunk; }); req.on(‘end’, function() { post = querystring.parse(post); res.writeHead(200,{“Content-Type”:“text/html;charset:UTF-8”}); res.write(post.title); res.write(post.text); res.end(); }); }).listen(3000);
好像编译没通过
赞!!!!