【2】文件读写-5-1-获知文件编码方式--chardet

在用beautifulsoap解码Html文件的时候,不停的出现乱码。出现乱码不可怕,只是需要知道这个文件的编码方式,然后decode一下就好咯。问题来了,如何知道一个文件的编码方式?

方法有很多:

方法一:file

file -i /home/sam/anbank/test/convert_data/20171108-T-1/20171108-T-1-3.html /home/sam/anbank/test/convert_data/20171108-T-1/20171108-T-1-3.html: text/html; charset=iso-8859-1

方法二:enca

enca test.txt

方法三:python的 chardet 模块

import chardet
some_string = '你好,世界。'.encode('utf-8') # encode方法返回一个bytes
# b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xe3\x80\x82'

result = chardet.detect(some_string) # 调用检测接口

print(result)

{'confidence': 0.7250590072891356, 'language': '', 'encoding': 'ISO-8859-1'}

更精细的方法:

import chardet
detector = chardet.universaldetector.UniversalDetector()

with open(input_html) as data1:
    text1 = data1.read()
    for line in text1:
        detector.feed(line)
        if detector.done:  # done为一个布尔值,默认为False,达到阈值时变为True
            break
    detector.close()

    print detector.result
    return
      
{'confidence': 0.5657854755393498, 'language': 'Chinese', 'encoding': 'GB2312'}

总结:

发现没,chardet两种方式得到的结果不一样,我的这个Hmtl文件,最后是GB2312的编码方式。具体为什么会这样,我也不晓得,我给的建议就是,用第一种方式得到的结果不对时,赶紧换第二种方法来进行尝试。

参考资料:

http://blog.csdn.net/jy692405180/article/details/52496599

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn