python 中的unicode与字符串

python中的str类型和unicode类型是两种不同的类型

怎么看呢 一个变量 type(val)就能看到它的所属类型


有时候 从数据库中取出数据,直接print出来: "u/u123" 这就表明它是unicode

unicode是python中的内部编码,也就是说 很多时候python的内部表示都用它来编码


所以 有decode encode函数


我们用u表示一个unicode对象 , s表示str对象。

s=u.encode('utf8')那么这时候 utf8假如是中文 那么中文可以正常显示(当然还有别的要求)

u=s.decode('utf8')那么s可以编码为unicode 从“utf8”这种格式


因为unicode为其内部编码,所以从非unicode转化为unicode使用的是decode,即解码,意思是python需要解码才能理解

而从unicode转化为非unicode使用的是 decode 意思是假如转化为非unicode编码,那么对于python来说意味着编码。


假设我们要忘mysql中插入utf8的字符 ,那么显然的 ,我们将u encode为utf8即可

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

二更

s=' 好'

这时s是str

s.encode('utf8')

表示要编码为别的编码,此时必须要转成默认的编码‘utf8’,再进行别的编码

所以这句话的默认操作是

s.decode(编码1).encode('utf8')

编码1 是你sys.getdefaultencodeing setdefaultencoding设置的

设置为utf8即可 


例子:

defaultencoding 为ascii

s=' 好'


s.encode('utf8')出错

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 5: ordinal not in range(128)

也就是s.decode('ascii')这一步错了

s.decode('utf8').encode('utf8')这样就OK了


 48     reload(sys)
 49     sys.setdefaultencoding('utf8')
 50     #print type(s.encode('utf8').decode('gbk'))
 51     print s.encode('utf8')

这样也OK

你可能感兴趣的:(python)