Javascript 如何在node.js中将HTTP响应体编码为UTF-8

Javascript 如何在node.js中将HTTP响应体编码为UTF-8,javascript,node.js,utf-8,Javascript,Node.js,Utf 8,这是当前我的整个node.js服务器代码: require('http').createServer(function (req, resp) { var html = [ '<!DOCTYPE html>', '<html>', '<head>', '<meta charset="utf-8" />', '<tit

这是当前我的整个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);
require('http').createServer(函数(req,resp){
变量html=[
'',
'',
'',
'',
“样本响应”,
'',
'',
“你好,世界”

, '', '' ].加入(“”); 负责人(200{ “内容长度”:Buffer.ByTeleLength(html,'utf8'), “内容类型”:“应用程序/xhtml+xml;” }); 分别写入(html,'utf8'); 分别结束(); }).听(80);
根据我对node.js文档的理解,resp.write()的第二个“utf8”参数应该使node将html字符串编码为UTF-8,而不是JavaScript字符串本机表示为的UTF-16。但是,当我将浏览器指向localhost:80,查看源代码并将其保存到本地html文件时,记事本++告诉我该文件是用UTF-16编码的。此外,当我通过W3CHTML验证工具运行它时,它还抱怨“内部编码声明utf-8与文档的实际编码(utf-16)不一致”


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

信不信由你,我在互联网上遇到的这个问题是由于。。。Internet Explorer。在这种情况下,Internet Explorer 11出于某种原因认为可以接受以UTF-16格式保存查看源代码窗口的结果,而不管原始页面编码是什么。所以,我的本地主机测试页面保存为utf16,google.com保存为utf16,等等。安装了Firefox及其utf8

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

也许你必须做:

'Content-Type': 'application/xhtml+xml; charset=utf-8'
根据:和

推荐HTTP头如下所示:

"Content-Type: text/html; charset=utf-8"
使用以下两个代码,可以使用IE8浏览器在utf-8中记录。 即使法语XP32不允许在记事本++中显示泰语字符

简表:

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);
var http=require('http');
var server=http.createServer(函数(req,res){
var body='你好,Döm

\n\ 你好吗?

\n\ ผมหมาป่า(我是狼)

'; res.writeHead(200,{“内容类型”:“text/html;charset=utf-8”}); res.write(正文,“utf-8”); res.end(); }); 监听服务器(8080);
长格式:

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);
var http=require('http');
var server=http.createServer(函数(req,res){
res.writeHead(200,{“内容类型”:“text/html;charset=utf-8”});
变量标题='样本响应'
var body='你好,Döm

\n\ 你好吗?

\n\ ผมหมาป่า(我是狼)

'; 变量代码=[ '', '', '', '', ''+标题+'', '', '', 身体, '', '' ].join('\n'); res.write(代码“utf8”); res.end(); }); 监听服务器(8080);

如果我将IE8中的泰语字符记录在HTML页面中,泰语字符会得到很好的保护。

你能启动一个数据包嗅探器(Wireshark等)并发布你看到的内容的样本吗?我不明白这种行为。你是通过上传文件或直接指向网站来验证的吗?我已经在Linux和Windows下用WebStorm和Sublime文本测试过这一点(这是4个测试),所有测试都显示UTF-8。也许这是一个记事本++的东西?应该也发送UTF-9头的图像吗?使用字符集发送图像还是只发送文本是一个好主意?