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);


6 回复

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);

解释

  1. 字符编码问题

    • 当从客户端接收数据并准备发送给客户端时,如果没有正确设置字符编码(如 UTF-8),可能会导致浏览器无法正确解析返回的数据,从而显示为乱码。
  2. 设置响应头

    • res.writeHead 方法中,我们设置了响应头 Content-Type: text/html; charset=utf-8。这告诉浏览器返回的数据是 HTML 类型,并且使用 UTF-8 编码。
    • 这一步非常关键,确保了浏览器能够正确解析和显示返回的内容。
  3. 处理空值

    • 在实际应用中,可能有时 post.titlepost.text 为空。为了避免错误,我们可以使用 || '' 来提供一个默认空字符串,这样即使这些字段不存在也不会引发错误。
  4. 数据拼接

    • 使用 res.write() 方法可以分多次写入数据到响应体中,最后调用 res.end() 结束响应。

总结

通过正确设置响应头中的字符编码,可以有效避免乱码问题。确保在处理 HTTP 响应时,合理地设置 Content-Typecharset 属性,可以使你的 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);

好像编译没通过

赞!!!!

从你的代码来看,问题可能出在以下几个方面:

  1. 字符编码设置:你没有明确地设置响应头中的 Content-Type。这可能会导致浏览器无法正确识别返回内容的编码方式。

  2. 输出内容编码:你在 console.log 中使用了未定义的变量 text,这可能导致错误或者未预期的行为。

示例修改后的代码

为了确保返回内容不会出现乱码,你可以这样修改代码:

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);
        
        // 设置响应头,告诉浏览器返回内容是UTF-8编码的文本
        res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
        
        // 输出接收到的数据
        console.log(post);
        res.write(post.title || '');
        res.write('\n'); // 分隔两部分内容
        res.write(post.text || '');
        res.end();
    });
}).listen(3000);

console.log('Server is listening on port 3000');

关键点解释

  • res.writeHead:明确设置了响应头 Content-Type,并指定了 charset=utf-8,确保浏览器知道如何正确解析返回的内容。
  • console.log(post):打印整个 post 对象,方便调试。
  • res.write(post.title || '')res.write(post.text || ''):添加了空字符串作为默认值,以避免当 titletext 不存在时可能出现的错误。

通过这些修改,你应该能够解决返回网页内容出现乱码的问题。

回到顶部