2012-05-06 4 views
8

Hier ist mein kleiner Code:Warum kann ich keine chinesischen Zeichen in die HTTP-Antwort von nodejs schreiben?

var http = require('http'); 
var port = 9002; 
var host_ip = '<my_ip>'; 
http.createServer(function (req, res) { 
    var content = new Buffer("Hello 世界", "utf-8") 
    console.log('request arrived'); 
    res.writeHead(200, { 
     'Content-Encoding':'utf-8', 
     'charset' : 'utf-8', 
     'Content-Length': content.length, 
     'Content-Type': 'text/plain'}); 
    res.end(content.toString('utf-8'),'utf-8'); 
}).listen(port, host_ip); 
console.log('server running at http://' + host_ip + ':' + port); 

Früher nur res.end lasse ich „Hallo Welt“ senden und es hat gut funktioniert. Dann wollte ich mich ein wenig anpassen und änderte die "Welt" in das chinesische Äquivalent "世界" und änderte den Inhaltstyp "charset" in der Kopfzeile in "utf-8". Aber in Chrome und Firefox sehe ich:

hello 涓栫晫 

jedoch erstaunlich Oper (11.61) zeigt das korrekte Ergebnis hello 世界. Ich möchte wissen, ob ich etwas im Code verpasst habe und warum dies geschieht. Danke Jungs.

Ich denke, this post ist ähnlich wie meine Situation, aber nicht genau.

Antwort

13

Problem ist mit der Spezifikation des Zeichensatzes. Bei mir funktioniert das mit dieser Änderung:

'Content-Type': 'text/plain;charset=utf-8' 

Getestet mit Chrome, Firefox und Safari.

Sie könnten auch die node.js Paket aussehen in „Express“, die ermöglicht der Code wie folgt umschreiben:

var express=require('express'); 

var app=express.createServer(); 

app.get('/',function(req, res) { 
    var content = "Hello 世界"; 

    res.charset = 'utf-8'; 
    res.contentType('text'); 
    res.send(content); 
}); 

app.listen(9002); 
+0

Ihr Genie !! Stimmt! –

+0

nun, ich weiß express und webjs, ich versuche einfach die gleiche Übung zu machen und stoße plötzlich auf dieses seltsame Problem ~ :) –

2

content-encoding ist kein Zeichensatz, sondern eine Codierung von HTTP-Antwort selbst

charset ist nicht ein gemeinsamer hTTP-Header

content-length

unneccesary hier als @jjrv sagte, Sie 'Content-Type': 'text/plain;charset=utf-8' es

+0

Du hast recht, ich dachte zuerst, wie das Handbuch sagt, ohne "content-length" wird es ein chunked Paket sein und ich denke, es wird den chinesischen Charater nicht korrekt anzeigen. Aber nachdem 'charset = utf-8' zu 'Content-Type' hinzugefügt wurde, habe ich das 'content-length'-Feld weggelassen und es hat gut funktioniert. –

0

涓栫晫 ist eigentlich 世界 bei der Codierung GB-18030, und dann angezeigt als UTF-8 schreiben soll. Wahrscheinlich wurden die Charaktere in dieser Kodierung gespeichert.

Verwandte Themen