如何在 node.js 中将 HTTP 响应正文编码为 UTF-8
How to encode HTTP response body as UTF-8 in node.js
这是我的整个节点.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",因为它支持更多字符......祝你好运。
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 如何将响应正文显示为html
- NodeJS-“;这种类型的响应不能有正文&”;
- 从保管箱响应正文中提取网址
- 节点.js请求对象 - 返回响应正文以供进一步操作
- 如何在 NodeJS 中传递响应参数,包括来自 POST http.request 的正文
- Spring ResponseEntity & AJAX error function:无法访问响应正文内容
- 如何在 node.js 中将 HTTP 响应正文编码为 UTF-8
- 如何读取空响应正文的 ajax post 调用的响应标头
- 获取 https 响应的正文
- Chrome扩展-如何获取HTTP响应正文
- 使用SlimerJS获取AJAX请求的响应正文
- node.js request.get以html正文响应,忽略404状态
- 在node.js中输出之前更改响应正文
- 如何处理未定义正文的响应
- JSON响应,包含http、头、元和正文
- 获取AJAX响应的正文标记
- 请求响应后正文中出现奇怪字符
- 在 Express.js 中解析 JSON 响应正文