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