关闭

Python的字符编码问题

标签: python编码
437人阅读 评论(2) 收藏 举报
分类:

Python 2,文件开头:# -*- coding: utf-8 -*-,则里面所标注的‘中文’ 为UTF8编码。但u'中文' 为Unicode编码

# 字符串和编码 - 廖雪峰的官方网站

# http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000


在最新的Python 3版本中,字符串都是以Unicode编码的。ASCII编码是1个字节,而Unicode编码通常是2个字节。(如果要用到非常偏僻的字符,就需要4个字节)

本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节。

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101
汉字已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101



#python中文转换url编码(转) -  51CTO技术博客

# http://xiaosu.blog.51cto.com/2914416/1560797

网站可接受的编码,在Header-ContentType里指定,一般是utf8,但百度的是gbk

url的地址编码是类似'%E4%B8%BD%E6%B1%9F',是UTF-8的一种变形(\x -> %)

>>> data = '中文' # '\xe6\x9d\xad\xe5\xb7\x9e' 	# utf-8编码
>>> urllib.quote(data) 			# '%E6%9D%AD%E5%B7%9E'
>>> data = u'中文' 				# u'\u4e2d\u6587'
>>> urllib.quote(data.encode('utf8'))		# quote函数只接收 UTF8 编码
>>> ord(u'中') 	# 20013 # Unicode, -> Bin(01001110 00101101) -> Hex(4E2D)
>>> u'中'		# u'\u4e2d' Unicode
>>> chr(66) 	# 'B'ASCII
>>> unichr(25991) 	# u'\u6587'
print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') 		# '中文'

那我们想转回去呢?
>>> urllib.unquote('%E6%9D%AD%E5%B7%9E') 		# '\xe6\x9d\xad\xe5\xb7\x9e' UTF-8
>>> print urllib.unquote('%E6%9D%AD%E5%B7%9E') 	# '杭州'
如果网站接受的是非utf-8编码,比如GBK,则用:
urllib.quote('中文'.decode('utf-8').encode('gbk'))		#'%D6%D0%CE%C4'
urllib.quote(u'中文'.encode('gbk'))			#'%D6%D0%CE%C4'

统一转换函数:
print unicode('\xe4\xb8\xad\xe6\x96\x87', 'utf8') 	# ‘中文’
print unicode('\xd6\xd0\xce\xc4', 'gbk') 		#‘中文’
print unicode(u'\u4e2d\u6587')


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:77524次
    • 积分:864
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:8篇
    • 译文:2篇
    • 评论:14条
    文章分类
    最新评论