设为首页 收藏本站
查看: 1236|回复: 0

[经验分享] python 编码转换

[复制链接]

尚未签到

发表于 2015-4-24 06:59:31 | 显示全部楼层 |阅读模式
  主要介绍了python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换。
  常见的编码转换分为以下几种情况:
  自动识别 字符串编码
  可以使用 chardet 模块自动识别 字符创编码
  chardet 使用方法
  unicode 转换为其它编码(GBK, GB2312等)
  例如:a为unicode编码 要转为gb2312。a.encode('gb2312')
  # -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
GBK 与 GB2312的区别
  GB 码,全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P- Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。
  GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月,同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。
  GBK 包括 GB2312的所有编码,有些字GB2312没有,需要用GBK来编码。
  转: gbk, gb2312,big5,unicode,utf-8,utf-16的区别
  其它编码(utf-8,GBK)转换为unicode
  例如:a为gb2312编码,要转为unicode. unicode(a, 'gb2312')或a.decode('gb2312')
  # -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312

a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8
非unicode编码之间的转换
  编码1(GBK,GB2312) 转换为 编码2(utf-8,utf-16,ISO-8859-1)
  可以先转为unicode再转为编码2
  如gb2312转utf-8
  # -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312

a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8
判断字符串的编码
  isinstance(s, str) 用来判断是否为一般字符串
isinstance(s, unicode) 用来判断是否为unicode
如果一个字符串已经是unicode了,再执行unicode转换有时会出错(并不都出错)
下面代码为将任意字符串转换为unicode
  def u(s, encoding):
    if isinstance(s, unicode):
        return s
    else:
        return unicode(s, encoding)
unicode 与其它编码之间的区别
  为什么不所有的文件都使用unicode,还要用GBK,utf-8等编码呢?
unicode可以称为抽象编码,也就是它只是一种内部表示,一般不能直接保存。
保存到磁盘上时,需要把它转换为对应的编码,如utf-8和utf-16。
  其它方法
  除上以上的编码方法,在读写文件时还可以使用codecs的open方法在读写时进行转换。
  命令行默认编码检测和设置
  可以用python自带的模块locale来检测命令行默认编码和设置命令行编码。
  import locale

#get
locale.getdefaultlocale()
#('zh_CN', 'cp936')

#set
locale.setlocale(...)
汉字转Unicode编码
  pd_name = pd_name.decode('utf-8')
    print pd_name
    nname = ""
    for c in pd_name:
      c = "%%u%04X" % ord(c);
      nname += c

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60064-1-1.html 上篇帖子: python 第6章抽象 下篇帖子: Python八荣八耻
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表