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: 在Unicode和普通字符串之间转换

1.1. 问题 Problem You need to deal with data that doesn't fit in the ASCII character set. 你需要处...
  • mydriverc2
  • mydriverc2
  • 2017年12月01日 14:52
  • 64

Python: 在Unicode和普通字符串之间转换

1.1. 问题Problem You need to deal with data that doesn't fit inthe ASCII character set. 你需要处理不适合...
  • u012448083
  • u012448083
  • 2016年07月15日 16:06
  • 19393

Python中unicode编码的字符串和其他格式的字符串之间进行转换

1.1. 问题 Problem You need to deal with data that doesn't fit in the ASCII character set. 你需要处...
  • nyist327
  • nyist327
  • 2015年10月09日 19:47
  • 1809

Unicode环境下完成CString向string类型的转换

CString是MFC的字符串类,它不是基本类型,而是对字符串的封装,它是自适应的,在UNICODE环境下就是CStringW,在非UNICODE环境下就是CStringA。       CStri...
  • lishuhuakai
  • lishuhuakai
  • 2014年06月04日 10:47
  • 5356

C++字符串之间转化——Unicode字符集

本文主要介绍:Unicode字符集下字符串之间以及字符串与数字之间的转化。 1.string、char*与 const char* string->char*char *ctr = new cha...
  • hong__fang
  • hong__fang
  • 2015年07月03日 17:12
  • 1870

深入理解Python的字符编码utf-8 & unicode

在Python中有两个和字符很相关的类型,一个是str类型,一个是unicode类型。 这两种类型的对象都是sequece序列,其中str是字节序列,而unicode是字符序列在2.x版本的pyth...
  • warrior_zhang
  • warrior_zhang
  • 2016年01月12日 13:03
  • 4018

Java实现字符与Unicode互转

Java实现字符与Unicode互转,有两个主要方法: Integer.toHexString();//转码 Integer.parseInt();//解码 通过以上两个方法实现对字符的转码与...
  • u012500848
  • u012500848
  • 2017年04月01日 17:52
  • 1568

python学习之unicode编码

python内建的字符串有两种类型:str和Unicode,它们拥有共同的祖先basestring。 Unicode也称做万国码,它为每种语言设定了唯一的二进制编码表示方式,提供从数字代码到...
  • u010867294
  • u010867294
  • 2016年06月30日 15:26
  • 318

Python中的str与unicode处理方法

转自:http://python.jobbole.com/81244/ python2.x中处理中文,是一件头疼的事情。网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自己总结一篇...
  • vickyrocker1
  • vickyrocker1
  • 2016年03月22日 08:58
  • 5537

在Python中正确使用Unicode

正确处理文本,特别是正确处理Unicode。是个老生常谈的问题,有时甚至会难倒经验丰富的开发者。并不是因为这个问题很难,而是因为对软件中的文本,开发者没有正确理解一些关键概念及其表示方法。在Stack...
  • yixiaojiejie
  • yixiaojiejie
  • 2015年01月22日 18:56
  • 647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python里的string 和 unicode (二)
举报原因:
原因补充:

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