【问题标题】:The character encoding of HTML document was not declared未声明 HTML 文档的字符编码
【发布时间】:2015-12-05 10:37:17
【问题描述】:

我正在从 Node.js 服务器提供 HTML 页面,并在浏览器控制台上收到此错误 -

未声明 HTML 文档的字符编码。如果文档包含 US-ASCII 范围之外的字符,则文档将在某些浏览器配置中呈现乱码。页面的字符编码必须在文档或传输协议中声明。

我知道以前有人问过这个问题,但大多数(如果不是全部)解决方案建议将此行添加到 HTML 文件中 -

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

我已经尝试过了,但它不适合我。

这是我为 HTML 提供服务的 Node.js 服务器代码-

var http = require('http');
var url = require('url');
var fs = require('fs');

var server = http.createServer(function(request, response) {
    console.log('connected');
    var path = url.parse(request.url).pathname;

    switch(path) {
        case "/realtime-graph-meter.html":
            fs.readFile(__dirname + path, function(error, data) {
                if(error) {
                    response.writeHead(404);
                    response.write("404 not found");
                } else {
                    console.log("before");
                    response.writeHead(200, {"Content-Type": "text/html"});
                    response.write(data, "utf-8");
                    console.log("after");
                }
            });
            break;
        default:
            response.writeHead(404);
            response.write("404 not found");
            break;
    }
    response.end();
});

server.listen(3000);
.
.
.

beforeafter 日志消息可以正确打印。我已验证我的 HTML 文件是 utf-8 编码的。

有什么建议吗?

【问题讨论】:

    标签: javascript html node.js


    【解决方案1】:

    试试:

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

    如果您注意到,您发布的meta 标签包含charset 属性。浏览器使用它来识别字符编码。 meta 标记是事后尝试模拟 HTTP 响应的 Content-Type 标头中通常应该包含的内容。如上所示修改您的代码将在 HTTP 响应标头中包含信息,这是执行此操作的首选方式。

    【讨论】:

    • 首先,您在哪个浏览器/版本中看到这个?要尝试几件事:清除本地缓存并重新加载页面以确保您没有获得缓存版本。此外,使用浏览器的开发者工具网络实用程序或 HTTP 流量监视器(如 Fiddler)来验证 Content-Type 标头是否按预期在响应中设置。
    【解决方案2】:

    只是为了结束这个问题。

    魔法咒语,要摆脱警告“HTML 文档的字符编码未声明。”,您需要在 HTML 文件的标题部分声明您的字符集。

    <meta charset="UTF-8">
    

    此外,它应该是该部分中的第一行之一。

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2012-07-22
      • 1970-01-01
      • 2012-11-09
      • 2014-08-27
      相关资源
      最近更新 更多