Python中的编码检测库
这和我在这里问的问题有点关系。
我处理了大量的文本(主要是HTML和XML格式),这些文本是通过HTTP获取的。我在找一个Python库,能够根据不同的策略智能地检测编码,并用最佳的字符编码将文本转换为Unicode。
我发现chardet在自动检测方面做得非常好。不过,自动检测所有内容是个问题,因为这样会很慢,而且不符合所有标准。根据chardet
的常见问题,我不想违反标准。
在同一个常见问题中,这里有我想要查找编码的地方:
- HTTP
Content-type
头中的charset参数。 - HTML文档中网页里的
<meta http-equiv="content-type">
元素。 - XML文档中XML前言里的编码属性。
- 最后的手段是自动检测字符编码。
基本上,我希望能够查看所有这些地方,并且自动处理冲突的信息。
有没有这样的库,还是我需要自己写一个?
2 个回答
10
BeautifulSoup 的 UnicodeDammit,它又使用了 chardet。
chardet
本身在判断文本编码方面非常有用,但正如你所说,它的速度比较慢。UnicodeDammit
在 chardet
的基础上增加了一些额外的功能,特别是它可以查找 XML 中编码标签明确指定的编码。
至于 HTTP 的 Content-type
头部,我觉得你需要自己读取这个信息,以提取 charset
参数,然后把它传递给 UnicodeDammit
的 fromEncoding
参数。
关于解决编码冲突的问题,UnicodeDammit
会优先考虑那些明确声明的编码(前提是这些编码没有产生错误)。具体的细节可以查看文档。
3
BeautifulSoup(一个用来解析HTML的工具)里面有一个叫做UnicodeDammit的类,专门用来处理字符编码的问题。你可以去看看,看看这个功能是否符合你的需求。