这是我的整个节点.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文档的理解,resp.write((的第二个"utf8"参数应该导致node将html字符串编码为UTF-8,而不是JavaScript字符串原生表示为UTF-16。但是,当我将浏览器指向localhost:80,查看源代码并将其保存到本地html文件中时,Notepad++告诉我该文件以UTF-16编码。此外,当我通过 W3C html 验证器工具运行它时,它还抱怨"内部编码声明 utf-8 不同意文档的实际编码 (utf-16("。
如何强制 node.js 将我的 HTTP 响应正文编码为 UTF 8?
也许你必须这样做:
'Content-Type': 'application/xhtml+xml; charset=utf-8'
根据 : https://www.w3.org/International/articles/http-charset/index 和 https://en.wikipedia.org/wiki/List_of_HTTP_header_fields。
推荐 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(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);
如果我在 HTML 页面中从 IE8 录制,泰语字符会很好地保留。
不信由你,我在互联网上遇到的这个问题是由于......IE浏览器。在这种情况下,Internet Explorer 11 认为无论原始页面编码如何,都可以以 UTF-16 格式保存"查看源代码"窗口的结果。因此,我来自本地主机的测试页面被保存为 utf16,google.com 被保存为 utf16,等等。
当他们说IE是一个糟糕的浏览器时,我不相信他们。我想我们有时都必须学习。
:(
如果您使用的是">node-http",则可以执行以下操作:
result.writeHead(200, {"Content-Type": "text/plain; charset=utf-8"});
如果您使用的是">express",则可以执行以下操作:
result.set({ 'Content-Type': 'text/plain; charset=utf-8' });
假设从数据库返回数据的情况,还必须确保字符集设置为"utf-8"。
转到数据库连接并添加 utf8mb4 作为字符集如下:
mysql.createConnection({
host: 'db_host',
port: 3306,
user: 'root',
password: 'password',
database: 'database',charset : 'utf8mb4',
});
如果您应该返回包含 unicode 的字符,那么最好的选择是将字符集设置为"utf8mb4",因为它支持更多字符......祝你好运。