欢迎您,零度科技专业海外服务器租用
公司电话: 24小时电话: 

当前位置:首页>帮助教程>python教程

目录导航

python 2.x的编码问题

韩国高防服务器 发布于 2014-10-22  

python教程

我发现很多刚刚接触Python的同行在python版本的选择上比较头疼,python3是未来的确是毋庸置疑,但是现实是缺乏很多强大的第三方库;2.x系列呢,又有很多人纠结编码问题,其实到了2.7的年代,python在编码以及平滑向3过渡的问题已经做了大量工作了。

我就基于python 2.7简单说说编码的事情,让更多人可以完全不用担心python的编码问题,放心大胆的使用当前的主流版本,并且将来还可以轻松过渡到python 3.x。

首先,讲讲str和unicode这两个对象。

str:其底层存储的字节跟输入有关,如果终端输入的是gbk编码的'中国',那么str里面保存的字节序列是'\xd6\xd0\xb9\xfa',如果输入编码是utf8,那么字节序列为'\xe4\xb8\xad\xe5\x9b\xbd'。而如果在终端用gbk编码显示字节序列为utf8编码的'中国',当然会乱码了。所以要搞定这种问题,首先要知道str里面的字节序列是什么编码的,找输入的源头吧。

unicode:其与str不同在只要你能正确生成unicode对象,那么此对象保存的东西永远是unicode编码,跟输入时的编码无关,你也不用知道其底层使用的是什么字节序列,只需要知道取出来的时候是unicode对象,要转成其他编码的字节序列的话encode一下就行了,例如,我有一个保存着"中国"二字的u,你要输出到gbk终端,那么可以u.encode('gbk'),这样就生成了一个gbk编码的字节序列。

仅此而已,搞清编码问题就是这么简单。

然后,来说说实际操作。

因为未来的python是全unicode的,所以在2.7中我们也最好把所有输入的字符串都生成为unicode对象,然后再进行各种操作。为了省事,以及完全忽略str和unicode的不同,可以在代码开始之前加上这句

from __future__ import unicode_literals

(想知道__future__是什么东西,可以自己看看python v2.7.2 doc的27.11节)

加上这句之后,'中国'和u'中国'一样,都是生成了unicode对象,在这种情况下,除非接收第三方库的输入或者使用str(),基本很难见到非unicode的字符串了。如此,你就不用再分心字符串到底是哪种对象的问题了,也不用写满篇的u'xxx'。

需要注意的就是,在使用某些诡异的较古老的第三方库,尤其是基于C的库时,注意要把unicode对象转成适当编码的str对象,因为这些库对特定编码的字节序列有依赖。

实际上,我本人的python代码都会在头部写上

from __future__ import print_function, unicode_literals, division 
from future_builtins import *

如此写出来的代码,跟python 3基本没什么区别,到时候过渡过去非常轻松。

零度科技原文链接:http://www.ldisp.com/a/python/2968.shtml

上一篇:浅谈五大Python Web框架
下一篇:Python经典应用 小程序实例源码

 
了解零度?

零度科技主营全球服务器租用,如果您有服务器租用需求请联系

海外服务器租用

推荐香港、美国、韩国。提供站群服务器、高防服务器租用

海外特价服务器

关注零度特价服务器频道,了解全球特价服务器。

1

业务咨询

    技术服务

      特价活动
        全站搜索
        热门搜索:
        会员
        0通知
        客服
        0特价
        搜索
        TOP
        香港高防服务器,远程桌面,韩国服务器,nginx,反向代理