终极大招

 import sys
 reload(sys)
 sys.setdefaultencoding('utf-8')




str和unicode相连接问题的原由

 Python2当中str其实是bytes,多字节字符串(多字节的字符串本质上是C里面的char *,没有任何编码限制,也不假定任何编码);unicode是unicode字符串。两者连接的时候,会把str转换成unicode再相连,但是转换时默认使用ascii编码,就会出现UnicodeDecodeError,'中文' + u'abc'一秒复现。



Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。编码是 unicode -> str,相反的,解码就
是 str -> unicode


更改默认编码为utf-8,原始为ascii

import sys

reload(sys) 

sys.setdefaultencoding('utf-8') 




Unicode 可以转 utf-8 和gbk
s_utf = s_uicode.encode('utf-8')
 
utf-8 和gbk 转Unicode
s_unicode = s_utf_8.encode('utf-8')



中文
Unicode        一个
Gbk              两个
Utf-8            三个

 

>>> gbk = 'asdf五'                 //当前默认的是gbk
>>> gbk
'asdf\xce\xe5'
>>> print gbk
asdf五
>>> len(gbk)
6
>>> unicode = gbk.decode('gbk')
>>> unicode
u'asdf\u4e94'
>>> print unicode
asdf五
>>> len(unicode)
5
>>> utf_8 = unicode.encode('utf-8')
>>> utf_8
'asdf\xe4\xba\x94'
>>> print utf_8
asdf五
>>> len(utf_8)
7


注:win 在添加中文路径时,将路径字符串转换为GBK

   在系统控制台输出时中文,转为Unicode或gbk,而utf-8为乱码

   在sublime的控制台输出编码与文件编码类型一样