Node.JS Webサーバーを使用しているときに、POSTデータのUTF-8文字列を解読する際に問題が発生しています。POSTデータのnode.jsおよびutf-8
は、この完全なテストケースを参照してください:
require("http").createServer(function(request, response) {
if (request.method != "POST") {
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
response.end('<html>'+
'<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>'+
'<body>'+
'<form method="post">'+
'<input name="test" value="Grüße!"><input type="submit">'+
'</form></body></html>');
} else {
console.log("CONTENT TYPE=",request.headers['content-type']);
var body="";
request.on('data', function (data) {
body += data;
});
request.on('end', function() {
console.log("POST BODY=",body);
response.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
response.end("POST DATA:\n"+body+"\n---\nUNESCAPED:\n"+unescape(body)+
"\n---\nHARDCODED: Grüße!");
});
}
}).listen(11180);
これは、ポート11180でリッスンし、特殊文字を入力フィールドが含まれている簡単なフォームでHTMLページを送信し、スタンドアロンのWebサーバです。そのフォームをサーバーにポストすると、その内容がプレーンテキストの応答でエコーされます。
私の問題は、特殊文字がコンソールやブラウザに正しく表示されていないことです。これは私がFirefoxとIEの両方で見たものである。
POST DATA:
test=Gr%C3%BC%C3%9Fe%21
---
UNESCAPED:
test=GrüÃe!
---
HARDCODED: Grüße!
最後の行は(それが表示問題ではないことを確認すると)、入力フィールドの値と一致する必要があり、ハードコード文字列Grüße!
です。明らかに、POSTデータはUTF-8として解釈されません。 require('querystring')
を使用してデータをフィールドに分割しても同じ問題が発生します。
ヒント? Linuxの4のDebian上のNode.jsのv0.4.11を使用
は、ソースコードは、UTF-8文字セットに保存され UTF-8文字は、ASCII文字セットにはない、で表されている
さて、私は、部分的に自分の質問に答えることができます。しかし、これは、 'querytring' Node.JSモジュールがまったく役に立たないことを意味し、私は自分自身でパースを行う必要があります。それとも私は何か騒がしいですか? –