如何检测 Python 中的字符编码

如何检测 Python 中的字符编码

Aspose.HTML 针对 Python 的 FOSS 按照标准规定检测原始字节中的字符编码:首先检测字节顺序标记(BOM),然后检测内容内部的声明。本指南会嗅探字节流并标准化编码标签,使用 pip 进行安装。

分步指南

步骤 1:安装软件包

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

步骤 2:导入所需函数

from aspose_html.encoding.detection import detect_encoding

步骤 3:检测字节流的编码

检测到一个 UTF-8 BOM,具有一定的置信度,并且已从解码后的文本中剥离 BOM 字节:

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

步骤 4:标准化编码标签

旧标签映射到规范名称——根据编码标准,latin1、iso-8859-1 和 us-ascii 都是 windows-1252。在比较之前,使用同一模块系列的 get_canonical_name() 来标准化标签。

常见问题及解决方案

在我的解码文本中出现了 BOM。 手动解码时会出现这种情况; detect_encoding() 从中剥离 BOM 字节 result.text.

对等标签的编码比较会失败。 比较规范名称,而不是原始标签——使用 … 对双方进行规范化 get_canonical_name().

奇特的编码会引发错误。 注册表之外的编码会引发 typed UnsupportedEncodingError; 如有可能,请处理它并在上游重新编码。

常见问题

detect_encoding 返回什么?

一个 EncodingDetectionResult,检测到的 encoding、confidence 级别,以及已解码的 text。

检测会查看 meta 标签吗?

是的 — 标准的 meta-prescan 在没有 BOM 时通过 prescan_meta_charset() 参与。

一旦我知道编码,我可以手动解码吗?

是的 — decode_bytes() 使用所选编码进行解码。

另请参阅

 中文