【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的编码方式。具体为什么会这样,我也不晓得,我给的建议就是,用第一种方式得到的结果不对时,赶紧换第二种方法来进行尝试。
参考资料:
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn