CNode

node.js入门中的事

问答
GgregLINm发布于9 年前最后回复9 年前4 回复3588 浏览0 收藏

相信这本书很多人都看过了。 在服务器接收到一些请求,在请求处理程序中返回相应的数据时,为什么这些数据用了UTF-8转码了还是乱码呢?

这是服务器的代码: var http = require("http"); var url = require("url");

function start(route, handle) {   function onRequest(request, response) {     var postData = "";     var pathname = url.parse(request.url).pathname;     console.log("Request for " + pathname + " received.");

    request.setEncoding("utf8");

    request.addListener("data", function(postDataChunk) {       postData += postDataChunk;       console.log("Received POST data chunk '"+       postDataChunk + "'.");     });

    request.addListener("end", function() {       route(handle, pathname, response, postData);     });

  }

  http.createServer(onRequest).listen(8888);   console.log("Server has started."); }

exports.start = start;

这是路由的代码: function route(handle, pathname, response, postData) {   console.log("About to route a request for " + pathname);   if (typeof handle[pathname] === 'function') {     handle[pathname](response, postData);   } else {     console.log("No request handler found for " + pathname);     response.writeHead(404, {"Content-Type": "text/plain"});     response.write("404 Not found");     response.end();   } }

exports.route = route;

这是请求处理程序的代码: function start(response, postData) {   console.log("Request handler 'start' was called.");

  var body = ''+     ''+     ''+     ''+     ''+     ''+     ''+     ''+     ''+     ''+     '';

    response.writeHead(200, {"Content-Type": "text/html"});     response.write(body);     response.end(); }

function upload(response, postData) {   console.log("Request handler 'upload' was called.");   response.writeHead(200, {"Content-Type": "text/plain"});   response.write("You've sent: " + postData);   response.end(); }

exports.start = start; exports.upload = upload;

求大牛帮下忙。

查看回复

回复 (4)

D
DevinXian#1·9 年前

论坛已经有过好几个关于这个的帖子了吧,自己搜搜, Buffer 相加是 toString 之后相加,必须Buffer.concat之类的方法来处理,参见《深入浅出NodeJS》;5年老帖: 小心buffer拼接的问题

L
liangtongzhuo#3·9 年前

如果我没有猜错的话,应该是 buffer 切割字符,会导致一些问题。

参与回复
登录后即可参与回复。登录