另外一个例子:
检测的编码是GB2312,闹祥闭注意到GBK是GB2312的超集,两者是同一种编码,检测正确的宴塌概率是74%,language字段指出的语言是'Chinese'。
注意:chardet支持检测的编码列表请参考官方文档 Supported encodings 。
读取ANSI编码文件建立一个文件test.txt,文件格式用ANSI,内容为:
abc中文
用Python来读取
# coding=gbk
print open("Test.txt").read()
结果:abc中文
读取utf-8编码文件没局(无BOM)
把文件格式改成UTF-8:
结果:abc涓 枃
显然,这里需要解码:
# -*- coding: utf-8 -*-
import codecs
print open("Test.txt").read().decode("utf-8")
结果:abc中文
读取utf-8编码文件(有BOM)
某些软件在保慧樱存一个以UTF-8编码的文件时,默认会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。在有些软件可以控制是否插入BOM。如果在有BOM的情况下,在读取时需要自己去掉这些字符,python中的枯碧让codecs module定义了这个常量:
python版本似乎太低了。我印象中国际编码支持似乎是版本高些才支持好些。也许python2.3以后,也许python2.5以后。给你一个不是很准确的用法。你试试看。也许成。我一直是这么隐改如做的。
r=''
s=open("somefile.txt","rb").read() #如果改成read(4096)有可能不成功
for enc in ['euc', 'big-5', 'utf-8', 'sjis', 'gbk', 'gb18030', 'utf-16']:
try:
r=s.decode(enc).encode('sjis')
break
except:pass
就相当于全部试歼弯一遍,哪个能用就用哪个。这灶启个方法会存在两个错误。你自己试试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)