Python的字符编码问题

转载 2016年08月31日 14:10:12

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')


python 处理中文遇到的编码问题总结 以及 字符str的编码如何判断

general : 尽量把所有的input 都decode成unicode。即 str.decode('')
  • xyqzki
  • xyqzki
  • 2014年07月25日 11:42
  • 18585

Python2和Python3之间关于字符串编码处理的差别

0x00 字符的编码计算机毕竟是西方国家的发明,最开始并没有想到会普及到全世界,只用一个字节中的7位(ASCII)来表示字符对于现在庞大的文字数量来说显然不够,所以先后经历了好几套编码方案,不同国家和...
  • yanghuan313
  • yanghuan313
  • 2017年03月18日 23:06
  • 3007

python判断字符串编码——使用chardet判断字符串编码的方法

转载自:http://www.jb51.net/article/62155.htm 这篇文章主要介绍了python使用chardet判断字符串编码的方法,涉及Python编码的技巧,具有一定...
  • huludan
  • huludan
  • 2016年01月31日 16:03
  • 1989

python字符编码问题的总结

概述: 以前刚学python时候遇到了一些关于字符编码的奇怪问题,没有仔细研究,而且为了避免这个问题就全用英文了,但是今天开始写的程序需要抓取网页上的中文,解析下来后字符编码的问题又回来了,而且比以...
  • No_red
  • No_red
  • 2017年01月19日 23:42
  • 267

python 2.x字符编码显示问题

Python2.x的中文显示方法 http://blog.sina.com.cn/s/blog_6b1ed4fb01019d4n.html python在安装时,默认的编码是ascii,当...
  • wuxiaobingandbob
  • wuxiaobingandbob
  • 2015年03月27日 08:56
  • 361

python 字符编码 调用其他程序 的一些问题记录

import sys print len(sys.argv) print type(sys.argv) print str(sys.argv) for a in range(1, len(...
  • qwerty_xk
  • qwerty_xk
  • 2013年06月04日 20:13
  • 964

python中字符编码问题

转自:http://ar.newsmth.net/thread-22e6e93f32a25f.html 我来讲一下字符问题我的理解吧,虽然我对Python的编码处理的具体细节还不太清楚,不过临时稍微...
  • shanliangliuxing
  • shanliangliuxing
  • 2012年11月20日 15:09
  • 443

Python字符编码的几个问题

几种字符编码方式ASCII——ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)...
  • Linkin_ygw
  • Linkin_ygw
  • 2017年02月22日 14:55
  • 159

Python中的字符编码问题

写之前必须先吐槽一句,字符编码问题真是让人头疼啊啊啊啊!几种字符编码简介ASCII码这是美国标准信息交换码,用8位表示一个字符,当然用这种方式表示所有的英文字母是完全够用了,多余的还能用来表示控制字符...
  • Young_Shine
  • Young_Shine
  • 2016年05月24日 21:13
  • 161

python 字符编码处理问题总结 彻底击碎乱码!

Python 字符编码问题全面总结
  • cqbmax
  • cqbmax
  • 2014年05月30日 10:56
  • 3206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python的字符编码问题
举报原因:
原因补充:

(最多只允许输入30个字)