如何使用 node.js 获取 html 4 上的字符集?

How do I get the charset on html 4 with node.js?

正在尝试获取此字符集:

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

当我打印响应头时:

console.log(response.headers);

我没有得到字符集,它应该在内容类型中:

{ 
    server: 'Apache',
    'content-type': 'text/html',
    expires: 'Mon, 19 Jan 2015 11:53:58 GMT',
    'content-language': 'en', etag: '"95c66e83dfd2080ec86ec4e20964788d"',
    'x-pal-host': 'pal115.telhc.bbc.co.uk:80',
    'content-length': '120599',
    date: 'Mon, 19 Jan 2015 11:53:44 GMT', connection: 'keep-alive',
    ...
}

如何在 node.js 的 html 4 个网站上获取字符集? 提前致谢。

<meta> 标记不是 header,因此它们的值不会显示在 HTTP 响应的 headers 属性 中。您需要解析响应 body。这确实提出了一个问题:你怎么知道如何在不知道编码的情况下解析某些东西?

这是 Web 浏览器粗略处理未在 Content-Type header 中正确定义其内容类型的文件的方式,我上次检查时:

  1. 开始使用 (user-defined) 默认值解析文档 body,例如 UTF-8.
  2. 猜猜用的是什么字符集:比如有很多字节是UTF-8中的non-printable字符,但恰好在Shift JIS中常用,那么你可能正在处理这个问题。
  3. 如果解析器恰好检测到以下情况之一:
    • <meta http-equiv="Content-Type">
    • <meta charset="">
      然后部分解析的文档被抛出并从文件顶部解析 re-starts。

您会明白为什么始终在字符集中包含 Content-Type header 是个好主意。对于您的应用程序,如果您不太担心某些文件出现乱码,则可以省略第 2 步。

作为一个很好的例子,Whosebug 本身设置了 Content-Type header,因此它没有(需要)<meta charset><meta http-equiv="content-type"> 标签。