1.使用chardet
import chardet
import re
chardetList = dir(chardet)
chlist = []
for x in chardetList:
if (re.match(r'[a-zA-Z]{0,100}$',x)):
chlist.append(x)
# print('chardet屬性:',chlist)
['UniversalDetector', 'VERSION', 'chardistribution', 'charsetgroupprober', 'charsetprober', 'codingstatemachine', 'compat', 'detect', 'enums', 'escprober', 'escsm', 'eucjpprober', 'euckrfreq', 'euckrprober', 'euctwfreq', 'euctwprober', 'hebrewprober', 'jisfreq', 'jpcntx', 'langbulgarianmodel', 'langcyrillicmodel', 'langgreekmodel', 'langhebrewmodel', 'langthaimodel', 'langturkishmodel', 'mbcharsetprober', 'mbcsgroupprober', 'mbcssm', 'sbcharsetprober', 'sbcsgroupprober', 'sjisprober', 'universaldetector', 'version']'''
當(dāng)我們拿到一個(gè)bytes時(shí)闷畸,就可以對(duì)其檢測(cè)編碼播歼。用chardet檢測(cè)編碼懊纳,只需要一行代碼:
r1 = chardet.detect(b'Hello,world!')
print('檢測(cè)編碼1:',r1)
{'encoding': 'ascii',#編碼格式
'confidence': 1.0, #檢測(cè)的概率1.0(即100%)
'language': ''
}
我們來(lái)試試檢測(cè)GBK編碼的中文:
data = '大風(fēng)起兮,云飛揚(yáng)'.encode('gbk')
data = '離離原上草乎完,一歲一枯榮'.encode('gbk')
r2 = chardet.detect(data)
print('檢測(cè)編碼2-GBK編碼:',r2)
{
'encoding': 'IBM855',
'confidence': 0.5266078104422526,
'language': 'Russian'
}
data1 = '大廈將傾熏兄,誰(shuí)堪棟梁'.encode('utf-8')
r3 = chardet.detect(data1)
print('檢測(cè)編碼2-UTF-8編碼:',r3)
日文檢測(cè)
data2 = '最新の主要ニュース'.encode('euc-jp')
r4 = chardet.detect(data2)
print('檢測(cè)編碼2-日文編碼:',r4)