使用通用编码检测器(chardet)在Python中的文本文件中进行字符检测

木川 *_* 炎星 19 python character-encoding

我试图在Python中使用通用编码检测器(chardet)来检测文本文件('infile')中最可能的字符编码,并在进一步处理中使用它.

虽然chardet主要用于检测网页的字符编码,但我找到了一个用于单个文本文件的示例.

但是,我无法弄清楚如何告诉脚本将最可能的字符编码设置为变量'charenc'(在整个脚本中多次使用).

我的代码基于上述示例和chardet自己的文档的组合,如下所示:

import chardet    
rawdata=open(infile,"r").read()
chardet.detect(rawdata)
Run Code Online (Sandbox Code Playgroud)

当脚本继续运行以下(以及几个类似的用途)时,字符检测是必要的:

inF=open(infile,"rb")
s=unicode(inF.read(),charenc)
inF.close()
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Dav*_*d Z 46

chardet.detect()返回一个字典,该字典提供编码作为与密钥关联的值'encoding'.所以你可以这样做:

import chardet    
rawdata = open(infile, 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']
Run Code Online (Sandbox Code Playgroud)

chardet文件是不是文本字符串和/或字节的字符串是否应该与模块的工作明确清晰,但按理说,如果你有一个文本字符串,你不需要在它上面运行字符检测,所以你应该可能是传递字节字符串.因此b调用中的二进制模式flag()open().但chardet.detect()也可能使用文本字符串,具体取决于您使用的Python版本和库,即如果您省略了b,即使您在技术上做错了,也可能发现它仍然有效.

  • Python 3.6 在尝试打开 UTF-8 文件时抛出 ```TypeError: Expected object of type bytes or bytearray, got: <class 'str'>```。用 ```"rb"``` 而不是 ```"r"``` 打开修复了这个问题。 (2认同)