Python中文问题

来源:互联网 发布:ubuntu wireshark lua 编辑:程序博客网 时间:2024/05/16 16:06

以下皆为Python2.x中--------------------


1、str与unicode

s = '哈哈'#str对象u = u'哈哈'#unicode对象

Python系统内部表示字符串使用unicode对象,采用默认编码。

str对象,即展现出的字符串,经过了utf-8或gbk方式等编码。

Windows下命令行控制台使用gbk编码,所以在控制台中s以gbk格式编码,ss为unicode

IDLE中默认同样为gbk编码,所以s为gbk编码;很奇怪的是,ss同样为gbk编码……


2、encode与decode

u.encode('utf-8')将unicode对象u编码为str,参数为编码方式

s.decode('utf-8')将str对象s解码为unicode,参数为解码方式

s = '哈哈'               # '\xb9\xfe\xb9\xfe'u = u'哈哈'              # u'\u54c8\u54c8'                #在IDLE下为'\xb9\xfe\xb9\xfe'ss = s.decode('gbk')     # u'\u54c8\u54c8'                #在IDLE下为u'\u54c8\u54c8'uu = u.encode('gbk')     # '\xb9\xfe\xb9\xfe'

故而将gbk转为utf-8,可用str.decode('gbk').encode('utf-8')


3、Python使用中文

# coding=utf-8

此条指令用于指明该文件以utf-8格式编码,以utf-8格式解析可能存在的中文。同时,文件中的str对象都是utf-8格式编码。

FTP服务器不一定采用哪种编码方式,通过ftplib访问“高清”的电影时

path = "影视/电影/高清"ftp.cwd(path)#若服务器同样为utf-8,传递path参数没问题ftp.cwd(path.decode('utf-8').encode('gbk'))#若服务器为gbk,则需将path转为gbk格式
当然,也可以用以下方式,本质是相同的,只不过path直接存储的unicode而已。这样,当源文件编码改变时不需改变代码。

path = u"影视/电影/高清"ftp.cwd(path.encode('gbk'))
--------------------------------------------------
在IDLE或windows命令行中,可以不指定源文件coding并且直接使用
path = "影视/电影/高清"ftp.cwd(path)
如上所述,IDLE和windows命令行默认为gbk,path参数同样为gbk,而服务器恰好也为gbk……

很多时候,采用默认编码可以执行,但自己指定源文件编码后却不可执行,都是因为与待读取文件、远程服务端格式不匹配造成的。

---------------------------------------------------

Python3.x中str对象同样为unicode,原生支持中文了……

原创粉丝点击