gbk编码python_python的编码判断
_unicode_gbkgb2312_utf。。。
python中, 我们平常使⽤最多的三种编码为 gbk/gb2312, utf8 , unicode。 ⽽python中并没有⼀个函数来进⾏ 编码的判断。今天,主要对这三种编码进⾏讨论,并给出区分这三种编码的函数。
我们知道,
unicode编码是1位 gbk,gb2312是2位 utf-8是3位
所以,若只有⼀个汉字,我们可以通过 长度来判断:
len(u'啊') == 1 #True
len(u'啊'.encode("gbk")) == 2 #True
len(u'啊'.encdoe("utf-8")) == 3 #True
但是实际中,往往是⼀句话,包含好多汉字。于是,我们做如下实验:
1,u'啊'.encode("gbk")[0].decode("gbk") 将会提⽰错误 UnicodeDecodeError: 'gbk' codec can't decode byte 0xb0 in position 0: incomplete multibyte sequence
2,u'啊'.encode('utf8')[0].decode("utf8") 将会提⽰错误 UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 0: unexpected end of data
3,u'啊'.encode('gbk')[0].decode('utf8') 将会提⽰错误 UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 0: invalid start byte
4,u'啊'.encode('utf8')[0].decode('gbk') 将会提⽰错误 UnicodeDecodeError: 'gbk' codec can't decode byte 0xe5 in position 0: incomplete multibyte sequence
5,u'啊'.decode('utf8') 将会提⽰错误 UnicodeEncodeError: 'ascii' codec can't encode character u'\u554a' in position 0: ordinal not in range(128)
6,u'啊'.decode('gbk') 将会提⽰错误 UnicodeEncodeError: 'ascii' codec can't encode character u'\u554a' in position 0: ordinal not in range(128)
由以上可以看出,提⽰错误若出现 ascii,则该句编码位 ascii ⽆疑,从2,3可以看出 .decode("utf8")可以区分出不同的编码:unexpected end of data 表⽰ 该句为 utf8编码, ⽽ invalid start byte 则表⽰
该句为gbk编码或者gb2312编码。
综上,可以编写如下函数来进⾏编码判断:(python27)
#! -*-encoding:utf8 -*-
def whichEncode(text):
text0 = text[0]
try:
text0.decode('utf8')
except Exception, e:
if "unexpected end of data" in str(e):
return "utf8"
elif "invalid start byte" in str(e):
return "gbk_gb2312"
elif "ascii" in str(e):
return "Unicode"
return "utf8"
if __name__ == "__main__":
print(whichEncode(u"啊".encode("gbk"))) print(whichEncode(u"啊".encode("utf8"))) print(whichEncode(u"啊"))
def getCoding(strInput):
'''
获取编码格式
'''
if isinstance(strInput, unicode):
return "unicode"
try:
strInput.decode("utf8")
return 'utf8'
except:
pass
try:
strInput.decode("gbk")
url编码和utf8区别return 'gbk'
except:
pass
def tran2UTF8(strInput):
'''
转化为utf8格式
'''
strCodingFmt = getCoding(strInput)
if strCodingFmt == "utf8":
return strInput
elif strCodingFmt == "unicode":
de("utf8")
elif strCodingFmt == "gbk":
return strInput.decode("gbk").encode("utf8")
def tran2GBK(strInput):
'''
转化为gbk格式
'''
strCodingFmt = getCoding(strInput)
if strCodingFmt == "gbk":
return strInput
elif strCodingFmt == "unicode":
de("gbk")
elif strCodingFmt == "utf8":
return strInput.decode("utf8").encode("gbk")
Python输⼊数据类型判断正确与否的函数⼤全(⾮常全)
对于python输⼊数据类型判断正确与否的函数⼤致有三类: (1)type(),它的作⽤直接可以判断出数据的类型 (2)isinstance(),它可以判断任何⼀个数据与相应的数据类型是否⼀致,⽐ ...
[转] Python 字符编码判断
Python 字符编码判断
题记 在获取中⽂字符的时候,如果出现乱码的情况,我们需要了解当前的字符串的编码形式.使⽤下⾯两种⽅法可以判断字符串的编码形式. 法⼀: isinstance(s, str) ⽤来判断是否为⼀般字符串 ...
Python编程-编码、⽂件处理、函数
⼀.字符编码补充知识点 1.⽂本编辑器存取⽂件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了⼀个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的,断电后 ...
python 字符编码判断 chardet评测
之前⼀直想到⼀个模块,针对字符判断是什么字符集编码的库 ⽹上有chardet的blog,发现⾃⼰的环境有这个库,于是就做了测试 >>>
import chardet >> ...
python 练习 simple_server 判断路径及返回函数
函数 routers 返回⼀个 urlpatterns 元组,⾥⾯包含了路径名和函数名:在 函数 application 中遍历 urlpatterns 元组,路径存在则返回函数名,不存在则返回 40 ...
python中编码判断
Python—字符编码转换、函数基本操作
字符编码转换 函数 #声明⽂件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了⽂件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...
python的编码问题
本⽂简单介绍了各种常⽤的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本⽂关于Python的内容仅适⽤于2.x,3.x 中str和unicode有翻天覆地的变化,请查阅其 ...
随机推荐
windows server 2012 r2 远程桌⾯连接指南
java ajax传值 中⽂乱码
String remark = new Request().getParameter("remark").getBytes("iso885 ...
angular中的$q服务
$q的⼀共有四个api: 1.$q.when(value, successFn, errorFn, progressFn),返回值为⼀个promise对象 --value可以是⼀个任意数据,也可以是⼀ ...
HDU1166 数状数组
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
【Notification】屏蔽特定应⽤的通知提⽰
须要默认屏蔽特定app的通知提⽰ 设置app是否接收通知的界⾯ 点击每⼀个条⽬进去的界⾯ AppNotificationSettings extends SettingsPreferenceFragm ...
JVM内存模型分析(⼀个程序运⾏的例⼦)
(.class字节码)类加载到内存之后,内存模型:(ps:.class⽂件可以通过javap 指令反编译成⼀个可读⽂件) 1.java栈,本地⽅法栈,程序计数器(每个线程私有) 看如下程序: 以该程序 ...
composer 使⽤
npm 安装指定模块版本
npm list 查看具体模块 如: npm list @antv/g6 如需要安装指定的模块和版本 保存时 - --save-dev 是你开发时候依赖的东西,--
save 是你发布之后还 ...
cookie js案例
//存cokie function setcookie(keys,value,time){ kie=keys+"="+decodeURIComponent( ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论