Python 字符串编码

字符串在python内部的表示是unicode编码,所以,在编码转换时,通常以unicode编码为中介。

这个过程是这样的,用decode将某种字符编码转换成unicode编码,比如str.decode('gb2312'),或者 u'str',将str从'gb2312'编码转换成'unicode'编码;然后再用encode将unicode编码转换成目标编码形式,比如str.encode('utf8'),将str从'unicode'编码转换成'utf8'编码。

在转码的时候一定要先搞明白,字符串str是什么编码。

代码中字符串的默认编码与代码文件本身的编码一致。查看系统源代码:

import sys
print sys.getdefaultencoding()

在英文系统中,输出为 ascii


如,str='中文'

如果在文件开头加上'#-*-coding:utf-8-*-',即utf8文件,那么该字符串就是utf8编码,直接print即可。如果是在gb2312文件中,则其编码为gb2312,这种情况下就需要按照上面的转码步骤进行转码。

通常,在没有指定特定的编码方式时,都是使用系统默认编码创建代码文件。


如,str=u'中文'

说明该字符串已经是unicode编码了,即python的内部编码,与代码文件本身的编码无关。在这种情况下,如果需要编码转换,只需要直接使用encode即可。比如,str.encode('utf8')。

如果,一个字符串已经是unicode编码了,再进行解码就会报错,所以需要确认编码形式是否是unicode:

isinstance(str, unicode)

在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。


在英文系统中,输入:

str = <span style="font-family: Arial, Helvetica, sans-serif;">u'中文'</span>
print str
系统会报错,UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为 在英文系统中,控制台信息输出窗口是按照ascii编码输出的,而上面是unicode编码,所以会产生错误。

解决方法是,改为:

print str.encode('gb2312')
或者

print str.encode('utf8')
注意,unicode(str, 'gb2312') 和 str.decode('gb2312')是一样的,都是将gb2312编码转换成unicode编码。

从网上看到讲的这么详细的,非常受益,就 转载过来。

下面代码值得学习:

#-*-coding:utf-8-*-
str = '中文'

if ininstance(str, unicode):
   print str.encode('gb2312')
else:
   print str.decode('utf-8').encode('gb2312')



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值