求助:表单中文,request.setEncoding('utf8') 乱码
场景:前台一个简单的form 登陆页 提交姓名,汉字。用firebug观察post请求如下:
参数application/x-www-form-urlencoded
age
name 王
源代码
name=%E7%8E%8B&age=
可见浏览器对汉字进行了UTF-8的URL编码。 后台nodejs服务器 代码:
function queryName(response, request){
var postData = "";
request.setEncoding('utf8');
request.addListener("data", function(postDataChunk){
postData += postDataChunk;
console.log("Received POST data chunk '"+postDataChunk+"'.");
});
request.addListener("end", function(){
console.log("完成:"+params.name);
});
}
request.setEncoding(‘utf8’);后依然是, name=%E7%8E%8B&age= 求真相。
6 回复
前台用了它再试试,encodeURIComponent
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="/queryName" method="post">
用户名:<input type="text" name="name"> </br>
年龄:<input type="text" name="age"></br>
<input type="submit" value="登录">
</form>
</body></html>
仅仅是个表单提交啊,如何用得encodeURIComponent呢
目前的解决方案是 在后端 用
decodeURIComponent()
貌似post请求放在body中浏览器不会进行编码吧?另外@suqian 所说,decodeURIComponent外面套一个try
request.setEncoding('utf8')
这是针对字节流对字符解码,UTF-8的URL编码
是遵循x-www-form-urlencoded格式,两者有关系么。nodejs没对URL编码的内容自动解码,怎么都不可能怪到setEncoding的身上。
楼上分析的有道理,我试了一下正常的form表单提交,用firebug看发现汉字也都是进行了URL编码,可能是经过tomcat服务器时候进行了解码处理然后传到后台的。跟nodejs确实不一样。果然还得适应一下。谢谢各位指点,涨姿势了