python中unicode、utf8、gbk等编码问题
2014-07-27 18:08
836 查看
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等
把上面的结果再转成gbk
print 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: ordin
al 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://blog.sina.com.cn/s/blog_6ce9e8870101gqzt.html
无论是什么平台什么编码格式都能转换为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等
把上面的结果再转成gbk
print 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: ordin
al 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://blog.sina.com.cn/s/blog_6ce9e8870101gqzt.html
相关文章推荐
- python中unicode、utf8、gbk等编码问题
- python中unicode、utf8、gbk等编码问题
- python中unicode、utf8、gbk等编码问题
- python中编码问题——unicode, gbk, utf8
- python中的汉字编码问题,兼及Qt,兼及各种编码 unicode, utf8,gbk,gb2312,gb18030.....
- Python中GBK, UTF-8和Unicode的编码问题
- 关于Python2中utf8,gbk,ascii的编码问题
- python编码问题——解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
- Python 有关unicode,gbk,cp2312,utf8的解码和编码
- python:正确的对未知编码的字符串进行预处理-Unicode-UTF8-gbk
- python 输出JSON类型数据时遇到的编码问题(utf8,unicode)
- Python中GBK, UTF-8和Unicode的编码问题
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
- Python中GBK, UTF-8和Unicode的编码问题
- python 中文编码(unicode,gbk,utf8,ordinary string)
- python的编码判断_unicode_gbk/gb2312_utf8(附函数)
- python编码问题——解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
- Python3 解决编码问题: `UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 10: ille
- Python中GBK, UTF-8和Unicode的编码问题