Python里的string 和 unicode (二)

转载 2015年07月08日 15:38:14
先说一下,前面提到,print(string)的时候,如果string是按当前环境编码方式编码的,可以正常输出,不会乱码;如果string不是当前编码的,就会乱码。而print(unicode)是不会乱码的。why?应为print(unicode)的时候,会把unicode先转成当前编码,然后再输出。我没看过print的源码,不过估计是这样的。

string转unicode或者unicode转string,是很常见的操作。

string和unicode都有decode()和encode()方法。decode是string2unicode,encode自然就是unicode2string。看个例子(中文Windows2003下):
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> c = a.decode('gbk') #gbk string to unicode
>>> b == c
True
>>> c
u'/u4f60/u597d'
>>> d = b.encode('gbk') #unicode to gbk string
>>> d == a
True
>>> d
'/xc4/xe3/xba/xc3'
>>> e = b.encode('utf-8') #unicode to utf-8 string
>>> e
'/xe4/xbd/xa0/xe5/xa5/xbd'

decode或者encode的时候,如果不指定编码方式,会按照缺省编码方式来处理。查看、设置缺省编码方式可以这样做:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> reload(sys) 
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('gbk')
上面调用sys.setdefaultencoding()的时候先reload一下sys module,原因是python启动时缺省会import site.py, 而site.py会del sys.setdefaultencoding(),所以需要reload(sys)。具体可以看看site.py的源码。

接下来说说unicode()函数。其实unicode函数就是调用string的decode()方法,把string转成unicode,例如:
>>> a = '你好'
>>> b = unicode(a)
>>> b
u'/u4f60/u597d'
>>> c = a.decode('gbk')
>>> c
u'/u4f60/u597d'
>>> print b, c, b==c
你好 你好 True

下一部分说说codec

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Python里的string 和 unicode (一)

首先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。 string object是由characters组成的sequence,而uni...

Python 中string和unicode的区别

前段时间在写一个excel文件内容比较的脚本时遇到关于string对象和unicode对象的比较问题。开始写的时候没有先获取对象的type查看,就直接按照string的比较方法进行操作,结果总是得不到...

Python 2.x 中的 String 与 Unicode

在 Python 2.x 中是有两种字串符相关类型的,分别为 String 和 Unicode,两者提供的接口非常类似,有时候又能自动转换,蛮容易误导人的。在 Python 3 中 这两个类型分别用 ...

python string,Unicode和Qstring学习笔记

python string和PyQt的QString的区别  以下在Python2.6和PyQt4.4.4 for Python2,6环境下讨论: Python中有两种有关字符的类型:Pyth...

Unicode编码的项目中CString、char* 、wstring、string的相互转换

1、CString转char* 可以使用以下函数: static char* StringToChar(CString str){ //获取字符串大小 int len = WideCharTo...
  • cyloser
  • cyloser
  • 2016年03月12日 20:27
  • 671

(转)标准模板库(STL)的 std::string 与Unicode的使用

是的,一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单。基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于 _UNICODE 的值: // abridged f...
  • gxj1680
  • gxj1680
  • 2011年05月05日 17:40
  • 672

Unicode accent String 比较问题

和上一篇接起来。因为要比较很多unicode,本想简单的用java自带的equalsIgnoreCase解决。后来发现很多音调问题没这么简单,例如à和a。看了一些解决办法,有建议用normalizer...

UNICODE_STRING 总结

UNICODE_STRING: typedef struct _UNICODE_STRING {   USHORT  Length;     //UNICODE占用的内存字节数,个数*2;   ...

String~char~Unicode~UTF-8

Unicode 是字符集;UTF-8 是编码
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python里的string 和 unicode (二)
举报原因:
原因补充:

(最多只允许输入30个字)