Python中chardet 用来实现字符串/文件编码检测模板
1、chardet下载与安装
chardet模块下载地址:http://pypi.python.org/pypi/chardet
下载完成之后解压文件,打开命令行窗口,切换到解压包所在文件夹,输入命令D:\Python34\python.exe setup.py install,即可安装完成
2.chardet能够检测到的编码方式
chardet 模块可以检测以下编码:
- ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
- Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
- EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese)
- EUC-KR, ISO-2022-KR (Korean)
- KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
- ISO-8859-2, windows-1250 (Hungarian)
- ISO-8859-5, windows-1251 (Bulgarian)
- windows-1252 (English)
- ISO-8859-7, windows-1253 (Greek)
- ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
- TIS-620 (Thai)
3.chardet模块使用
使用chardet模块判断字符编码使用detect()函数即可:
- >>> import chardet
- >>> import urllib.request
- >>> response=urllib.request('http://tool.cc/fuhao/')
- >>> response=urllib.request.urlopen('http://tool.cc/fuhao/')
- >>> html=response.read()
- >>> chardet.detect(html)
- {'confidence': 1.0, 'encoding': 'UTF-8-SIG'}
- >>>
其中confidence表示精确度,1.0表示编码方式百分百是‘UTF-8-SIG’
我们可以通过获取encoding的值得到源代码的编码方式
>>> encode=chardet.detect(html)['encoding']
>>> print(encode)
UTF-8-SIG
>>>
获取编码方式之后直接使用编码方式进行解码就不会报错了
with open('E:\\test15.txt','w',encoding=encode) as f1:
f1.write(html.decode(encode,'ignore'))
这样即使碰到一些其他的编码方式,即使不知道源代码的编码方式,也不会报错了