我们不能根据特定的模式来 100% 确定二进制文件的编码。

如何找出字节序列的编码?简单来说,不能。必须有人告诉你。

我们不能根据特定的位模式来 100% 确定二进制文件的编码是 ASCII 或 UTF-8。 然而,就像人类语言也有规则和限制一样,只要假定字节流是人类可读的纯文本,就可能通过试探和分析找出编码。(利用统计学的思想)

统一字符编码侦测包Chardet就是这样工作的,它能识别所支持的 30 种编码。Chardet 是一个 Python 库,可以在程序中使用,不过它也提供了命令行工具 chardetect。使用示例:

% chardetect _config.yml
_config.yml: utf-8 with confidence 0.99

输出的是对文件编码的判断和置信度。(应该算是统计学的应用,有趣)

参考《流畅的Python》第4章关于编解码的内容。