我有这段代码:
var qs = require('querystring');
var http = require('http');
http.createServer(function (req, res) {
if ('/' == req.url) {
res.writeHead(200, { 'Content-Type': 'text/html'});
res.end([
'<form method="post" action="/url">',
'<h1>My form</h1>',
'<fieldset>',
'<label>Personal information</label>',
'<p>What is your name?</p>',
'<input type="text" name="name">',
'<p><button>Submit</button></p>',
'</form>'
].join(''));
} else if ('/url' == req.url && 'POST' == req.method) {
var body = '';
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
res.writeHead(200, { 'Content-Type': 'text/html'});
res.end('<p>Your name is: <strong>' + qs.parse(body).name + '</strong></p>');
});
}
}).listen(3000);
假设我在输入字段中写了我的瑞典名字“AndersÖstman”,并在表格中张贴。一切似乎都很好,除了我的名字输出为Anders�stman。 charatcher“Ö”被删除......我想这与字符编码有关,我需要设置/转换解析后的对象为UTF-8。
问:有没有办法将qs.parse()直接导入UTF-8对象?或者对象没有编码?我输出它时是否需要对对象值进行编码?
答案 0 :(得分:1)
要确保浏览器发送正确编码的表单数据,请尝试添加显式编码标头:
res.writeHead(200, { 'Content-Type': 'text/html; charset=UTF-8'});
要调试此功能,请尝试添加
console.log(body)
到第二个分支。如果它说
name=Anders+%D6stman
浏览器仍在发送Latin-1(这是错误的)。它应该是
name=Anders+%C3%96stman
答案 1 :(得分:1)
您需要将两者的Content-Type
格式和更改为text/html; charset=utf-8
的POST响应。之后你会看到预期的结果(我在本地测试过):
var qs = require('querystring');
var http = require('http');
http.createServer(function (req, res) {
if ('/' == req.url) {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.end([
'<form method="post" action="/url">',
'<h1>My form</h1>',
'<fieldset>',
'<label>Personal information</label>',
'<p>What is your name?</p>',
'<input type="text" name="name">',
'<p><button>Submit</button></p>',
'</form>'
].join(''));
} else if ('/url' == req.url && 'POST' == req.method) {
var body = '';
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.end('<p>Your name is: <strong>' + qs.parse(body).name + '</strong></p>');
});
}
}).listen(3000);
您也可以将html中的字符集设置为meta
中的<head>
标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
或HTML5:
<meta charset="utf-8">
答案 2 :(得分:0)
似乎这是缓存中的一些问题或者类似的问题...我试过在另一个浏览器中,它有效。然后我删除了chrome的总缓存,并让它在那里工作!