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

[经验分享] [转]python中的字符编码

[复制链接]

尚未签到

发表于 2017-4-27 12:11:19 | 显示全部楼层 |阅读模式
  python中的unicode是一种内置类型,用来表示unicode字符串。其使用的编码方式在编译时决定,可以选择使用UCS-2或者UCS-4表示。(在gentoo linux上,可以通过ucs2这个USE flag来控制)
  由于unicode是一种内置类型,对其序列化(比如存盘、通过socket发送等)时必须要先将其编码成字节序列,也即python中的string类型。编码使用unicode的encode方法,其参数为编码名称,在encodings包中定义,encodings包中的alias.py文件定义了一些编码的别称。如调用encode时未指定参数,则使用sys.getdefaultencoding()的返回值编码。该值默认为'ascii',可以在$PYTHONHOME/sitecustom.py中使用sys.setdefaultencoding()修改。
  在某些操作中会进行隐式的编码转换,比如file.write()方法可以接受string参数也可以接受unicode参数。在接受unicode参数时就会自动采用sys.getdefaultencodings()的返回值将其编码为字节序列。
  由于默认编码为'ascii',这种编码只能表示unicode中前128个字符,在碰到包含其他字符的unicode对象时就会发生exception。可以通过两种方式解决这个问题:
1、修改sitecustom.py,将默认编码改为可以处理更大字符集的编码,如gb18030或utf8。
2、在代码中显式使用恰当的编码调用encode,将unicode对象转为string对象,然后再进行处理。
  如果你的代码会给别人使用的话,推荐使用第二种方式,这样对方就不需要修改他的sitecustom.py了。但这种方法对程序的要求较高。
  将已编码的string还原成unicode:使用s.decode(encoding_type),或者unicode(s, encoding_type)。
  在源程序中表示unicode常量:使用u"your_string",解释器将根据源程序的编码类型(默认为iso8859-1,通过源程序文件的第一行或第二行可以指定,比如#--*-- encoding: utf8 --*--)将其转换为unicode对象。
  在控制台(console)上处理unicode:每一个console都有自己的编码,比如中文windowsxp的cmd命令行,其编码为GB18030。在linux下,通过环境变量LANG可以指定。所有对unicode的序列化操作(比如print),都将以该编码处理。
  wxPython中的unicode:
  wxPython分为unicode和ansi两个版本。wxPython是图形界面库,其版本只针对图形界面而言,其他部分的操作仍然按照python的方式。unicode版本中,所有返回的界面字符串均是以unicode对象来表示,而ansi版本则是以string对象来表示,其编码方式为操作系统默认编码。比如你在一个文本框中敲入"中文"二字,self.textbox.GetValue()在unicode版本返回u"中文",在ansi版本则返回GB18030编码的"中文"。

运维网声明 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-369993-1-1.html 上篇帖子: Python正则表达式用法 下篇帖子: py2exe打包python为exe
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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