确定 HTML 或 XML 字节流的编码
这个包决定了HTML或XML字节流的字符编码. 它遵循 HTML 标准 编码嗅算法 对于 HTML,和WebKit 的编码嗅觉行为为 XML .
const htmlEncodingSniffer = require("html-encoding-sniffer");
const fs = require("node:fs");
const bytes = fs.readFileSync("./page.html");
const sniffedEncoding = htmlEncodingSniffer(bytes);
用于 XML, 通过 { xml: true }数字 :
const bytes = fs.readFileSync("./document.xml");
const sniffedEncoding = htmlEncodingSniffer(bytes, { xml: true });
传递的字节为 Uint8Array; 节点.js Buffer 子类 Uint8Array 如上所示,还将开展工作.
返回的值将是一个峡谷 编码名称 (不是标签). 你也许可以把这和 @exodus/bytes 解码结果的软件包 :
const { TextDecoder } = require("@exodus/bytes/encoding.js");
const decodedString = (new TextDecoder(sniffedEncoding)).decode(bytes);
选项
您可以将以下选项传递至 htmlEncodingSniffer数字 :
const sniffedEncoding = htmlEncodingSniffer(bytes, {
xml,
transportLayerEncodingLabel,
defaultEncoding,
maxPrescanBytes
});
这个 xml 选项是一个布尔,默认为 false中选择 XML 嗅觉 true hTML 嗅觉时 false。XML 嗅觉忽略 HTML <meta> 声明和给调用者的 XML 解析器留下了良好的结构验证.
这个 transportLayerEncodingLabel 是一个从“ 运输层” 获得的编码标签( 可能是 HTTP) Content-Type 除了BOM,它能超越一切.
这个 defaultEncoding 如果运输层没有提供有效的编码,则是所使用的最终倒置编码,并且没有从字节中嗅出编码。 对于 HTML, 它默认为 "windows-1252",按照算法中“所有其他地方”的默认值建议表(包括 en (原始内容存档于2017-09-29). lane. XML 默认为 "UTF-8"。 。 。 .
这个 maxPrescanBytes 选项设置要扫描 HTML 的字节数 <meta> 编码声明,默认为 1024设定更大的值来确认输入中稍后的宣布, Infinity 扫描整个输入,或 0 以跳过元扫描。 必须是非负整数或 Infinity。这一限制不适用于XML声明或UTF-16字节签名。 何时供应 xml 实值 true 丢出一个 TypeError。 。 。 .
贷项
这一一揽子方案最初是基于以下各方面的出色工作: @nicolashenry (英语), (中文(简体) ), 缩写从那时起,它就被拉进了这个单独的包.