node.js不支持GBK编码,只支持UTF8。Windows系统上默认保存的文件都是GBK编码,没有指定编码的html,浏览器也是使用GBK编码解析。为了让http请求和相应都支持中文,故说有地方均使用UTF8。使用了fs读取html(参照API
File System),可以让html代码不用写在javascript中。修改后的javascript代码如下(使用UTF8格式保存为example5.js):
[javascript] - var http = require("http");
- var server = http.createServer();
- var querystring = require("querystring");
- var fs = require("fs");
-
- var firstPage = function(res){
- res.writeHead(200, {"Content-Type": "text/html"});
- var html = fs.readFileSync("login.html");
- res.end(html);
- }
-
- var login = function(req, res) {
- var info ="";
- req.addListener("data", function(chunk){
- info += chunk;
- })
- .addListener("end", function(){
- info = querystring.parse(info);
- res.setHeader("content-type","text/html; charset=UTF-8");//响应编码,如果是html,写在head中也可以
-
- if(info.name == "张" && info.pwd =="1"){
- res.end("login success 成功 " + info.name);
- }else{
- res.end("login failed 失败 " + info.name);
- }
- })
- }
-
- var requestFunction = function (req, res){
- req.setEncoding("utf8");//请求编码
-
- if(req.url == "/"){
- return firstPage(res);
- }
- if(req.url == "/login"){
- if (req.method != "POST"){
- return;
- }
- return login(req, res)
- }
- }
-
- server.on("request",requestFunction);
- server.listen(1337, "127.0.0.1");
-
- console.log("Server running at http://127.0.0.1:1337/");
在同目录下添加一个login.html 文件(使用UTF8格式保存)
[html] - <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
- </head>
- <body>
- <form action="/login" method="post">
- 用户名:<input type="text" name="name"> </br> 密???:<input type="password" name="pwd"></br>
- <input type="submit" value="登录">
- </form>
- </body></html>
在命令行中执行 node example5.js 在地址栏中输入
http://127.0.0.1:1337/输入 用户名 张 密码 1 ,点击登录
输入 用户名 张 密码 2 ,点击登录
编码问题解决为什么服务端的js文件也要保存为UTF8格式,因为node.js是对原文件直接解释的语言,如果是java就不需要,设一个过滤器就OK了。