python 字符串编码问题 内容目录 1.普通字符串与unicode转换无论是什么平台什么编码格式都能转换为unicode格式。以utf8编码方式把字符串转换为unicode:'aaa'.decode('utf8')等同于unicode('aaa', 'utf8')把unicode字符串转换为utf8编码格式字符串:'aaa'.decode('utf8')注意:这样写已经表示'aaa'是一个unicode格式的字符串了,等同于u'aaa'.decode('utf8')如果全部是英文字符或者数字,则utf8与gbk输出结果一致,而且带不带u都一样2.有汉字的字符串这是中国程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的,伤不起!把普通中午字符串转换为unicode:'也有'.decode('gbk')注意:此时字符串前不能加u,而且汉字编码只能写gbk或者gb2312等把上面的结果再转成gbkprint u'\u4e5f\u6709'.encode('gbk')当然unicode可以转成utf8,但是要看你的终端支持什么编码了,要不然就会乱码,我用的WIN,所以就用gbk测试如果不用print输出,直接u'\u4e5f\u6709'.encode('gbk')或者u'\u4e5f\u6709'.encode('utf8')你会看到这两个汉字在gbk和utf8编码格式下的字符,这里不多研究了(utf8汉字编码比gbk多一个字符)下面把运行的结果输出:>>> 'aaa'.decode('utf8')u'aaa'>>> unicode('aaa', 'utf8')u'aaa'>>> 'aaa'.decode('utf8')u'aaa'>>> u'aaa'.decode('utf8')u'aaa'>>> '也有'.decode('gbk')u'\u4e5f\u6709'>>> print u'\u4e5f\u6709'.encode('gbk')也有>>> u'\u4e5f\u6709'.encode('gbk')'\xd2\xb2\xd3\xd0'>>> u'\u4e5f\u6709'.encode('utf8')'\xe4\xb9\x9f\xe6\x9c\x89'说明:str()函数,有时候我们要借助它来过度转换,比如u'长春市',这就是我下午遇到的问题,把urlencode转换的编码经过urldecode解码,结果前面多个u,此时是utf8编码,然后decode成unicode,出问题了:>>> s = u'长春市'>>> import urllib>>> urllib.unquote(s)u'\xe9\x95\xbf\xe6\x98\xa5\xe5\xb8\x82'>>> urllib.unquote(s).decode('utf8')Traceback (most recent call last): File "", line 1, in File "D:\Python26\lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True)UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)特别注意:utf8编码、gbk编码的原型加上u然后再转unicode是错误写法,肯定转不了,那怎样去掉u呢?str()函数也不能直接转,只好把u'长春市'用str()处理去掉u,然后一切都OK了。>>> urllib.unquote(str(s)).decode('utf8')u'\u957f\u6625\u5e02'>>> print urllib.unquote(str(s)).decode('utf8')长春市转载:http://luchanghong.com/python/2012/07/06/python-encoding-with-unicode-and-gbk-and-utf8.html ×用微信扫描并分享