2013-10-12 40 views
3

这是目前我的整个的node.js服务器代码UTF-8:如何HTTP响应体编码为在node.js中

require('http').createServer(function (req, resp) { 
    var html = [ 
     '<!DOCTYPE html>', 
     '<html>', 
      '<head>', 
       '<meta charset="utf-8" />', 
       '<title>Sample Response</title>', 
      '</head>', 
      '<body>', 
       '<p>Hello world</p>', 
      '</body>', 
     '</html>' 
    ].join(''); 

    resp.writeHead(200, { 
     'Content-Length': Buffer.byteLength(html, 'utf8'), 
     'Content-Type': 'application/xhtml+xml;' 
    }); 
    resp.write(html, 'utf8'); 
    resp.end(); 
}).listen(80); 

根据我的Node.js的文件的理解,第二个“UTF8 'resp.write()的参数应该会导致节点将html字符串编码为UTF-8,而不是JavaScript字符串本身表示为的UTF-16。但是,当我将浏览器指向localhost:80时,查看源代码并将其保存到本地html文件中,Notepad ++告诉我该文件以UTF-16编码。此外,当我通过W3C HTML验证工具运行它时,它也会抱怨“内部编码声明utf-8与文档的实际编码(utf-16)不一致”。

如何强制node.js将我的HTTP响应正文编码为UTF 8?

+0

你可以启动一个数据包嗅探器(Wireshark等)并发布你所看到的样本吗?我没有得到这种行为。 – Brad

+0

您是通过文件上传还是直接指向网站进行验证? –

+0

我已经测试了这两个与WebStorm和Sublime文本,在Linux和Windows(所以这是4个测试),并都显示UTF-8。也许这是一个记事本++的东西? –

回答

0

不管你信不信,我与互联网有这个问题是由于... IE浏览器。在这种情况下,Internet Explorer 11出于某种原因认为可以接受将UTF-16中的“查看源代码”窗口的结果保存,无论原始页面编码如何。所以,我从localhost的测试页被保存为utf16,google.com被保存为utf16等。等等。安装Firefox和它的utf8,只要眼睛能看到。

我不相信他们,当他们说IE浏览器是一个可怕的浏览器。我想我们都需要学习一些时间:(

11

也许你要做的:

'Content-Type': 'application/xhtml+xml; charset=utf-8' 
1

据:https://www.w3.org/International/articles/http-charset/indexhttps://en.wikipedia.org/wiki/List_of_HTTP_header_fields

推荐HTTP标头看起来是这样的:

"Content-Type: text/html; charset=utf-8" 

下面的两个代码,也可以使用UTF-8与IE8浏览器来记录。 即使法国XP32不允许DISPLA y记事本++中的泰文字符。

简称:

var http = require('http'); 

var server = http.createServer(function(req, res) { 
    var body = '<p>Hello Döm</p>\n \ 
    <p>How are you ?</p>\n \ 
    <p>ผมหมาป่า(I am The Wolf)</p>'; 

    res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}); 
    res.write(body, "utf-8"); 
    res.end(); 
}); 

server.listen(8080); 

长型:如果我从IE8在HTML页面中记录

var http = require('http'); 

var server = http.createServer(function(req, res) { 
    res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}); 

    var title = 'Sample Response' 
    var body = '<p>Hello Döm</p>\n \ 
    <p>How are you ?</p>\n \ 
    <p>ผมหมาป่า(I am The Wolf)</p>'; 

    var code = [ 
     '<!DOCTYPE html>', 
     '<html>', 
      '<head>', 
       '<meta charset="utf-8" />', 
       '<title>' + title + '</title>', 
      '</head>', 
      '<body>', 
       body, 
      '</body>', 
     '</html>' 
    ].join('\n'); 

    res.write(code, "utf8"); 
    res.end(); 
}); 

server.listen(8080); 

泰语字符都保存完好。