编码检测

编码检测

HTML 以字节形式到达,编码层回答任何流水线的第一个问题:使用何种编码,以及得到什么文本?检测遵循标准方法——首先检查字节顺序标记(BOM),随后是内容内部的声明。


从字节检测

detect_encoding() 嗅探字节流并返回一个 EncodingDetectionResult,其中包含检测到的编码、置信度以及解码后的文本。一个 UTF-8 BOM 被确定为存在,并且在解码输出中会剥除 BOM 字节:

from aspose_html.encoding.detection import detect_encoding
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)

检测工具包

sniff_bom() 仅检查字节顺序标记;prescan_meta_charset() 对文档内部的字符集声明执行标准的元预扫描;decode_bytes() 在选择编码后执行解码。不支持的编码会抛出特定的 UnsupportedEncodingError。

规范名称

编码标签在实际使用中各不相同 — latin1、iso-8859-1 和 us-ascii 根据编码标准都表示 windows-1252。get_canonical_name() 将任何已注册的标签映射到其规范名称。


提示与最佳实践

  • 信任 BOM:当其存在时,它是决定性的,检测器会报告确定的置信度
  • 在比较编码之前,通过 get_canonical_name() 规范化标签
  • 使用检测得到的 result.text,而不是自行重新解码字节

常见问题

问题原因修复
在解码文本中出现 BOM手动解码而非 detect_encoding()检测会从 result.text 中去除 BOM 字节
标签比较失败别名与规范名称不匹配使用 get_canonical_name() 进行归一化
抛出 UnsupportedEncodingError输入编码不在注册表中处理已键入的错误;向上游重新编码

FAQ

检测返回什么?

一个带有 encoding、confidence 和已解码 text 的 EncodingDetectionResult。

是否处理遗留标签?

是的——别名表会将类似 latin1 和 us-ascii 的标签映射到它们的规范编码。

检测会读取元标签吗?

prescan_meta_charset() 实现了标准的 meta-prescan 并参与检测。


API Reference 摘要

类/方法描述
detect_encoding检测编码并解码字节
EncodingDetectionResult检测结果对象
sniff_bom字节顺序标记检查
prescan_meta_charset标准元预扫描
decode_bytes使用选定的编码解码
get_canonical_name规范化编码标签

另请参阅

 中文