python字符串编码转换
Ⅰ python 字符串格式的unicode编码转中文
python对于Unicode编码可以使用decode进行转换成中文:
>>> str = b'\xe8\xb4\xb9\xe8\x84\x91\xe5\xad\x90'
>>> str.decode('utf-8')
'费脑子'
如果是字符串类型的Unicode编码没办法直接用decode进行转换:
>>> str ="\\xe8\\xb4\\xb9\\xe8\\x84\\x91\\xe5\\xad\\x90"
>>> str.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
AttributeError: 'str' object has no attribute 'decode'
处理方式:
>>> str = eval("b" + "\"" + str + "\"")
>>> str.decode('utf-8')
'费脑子'
Ⅱ Python 编码转换与中文处理
python 中的 unicode 是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好, utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.
Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用" 编码指示 "来修正一个 mole 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的编码如:gbk、gb2312也可以;否则会出现:
先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str 和 unicode ,他们都是basestring的派生类;
在str的文档中有这样的一句话:
也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。
unicode 转为 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK转换为 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 转为 unicode,
如果直接执行s.encode('gb2312')会发生什么?
这里会发生一个异常:Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是 ANSCII,如果 s 不是这个类型就会出错。
拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:
对于这种情况,我们有两种方法来改正错误:
s = '中文'
s.decode('utf-8').encode('gb2312') ```
import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')
print open("Test.txt").read()
import codecs
print open("Test.txt").read().decode("utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'ufeff' in position 0: illegal multibyte sequence
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
s = "中文"
print unicode(s, "utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
s = "中文"
print unicode(s, "gbk")
s = "中文"
print unicode(s, "cp936")
Ⅲ Python如何将Unicode中文字符串转换成 string字符串
Unicode字符串可以用多种方式编码为普通字符串,假设unicodestring = u"Hello world",依照所选择的编码(encoding),如下:
1、#将Unicode转换成普通的Python字符串:"编码(encode)"。
(3)python字符串编码转换扩展阅读:
Python转换字符和字符串的原因:为了处理不适合用ASCII字符集表示的数据。
在以ASCII码为中心的语言和环境中,字节和字符被当做相同的事物。由于一个字节只能有256个值,这些环境就受限为只支持256个字符Unicode码,另一方面,有数万个字符,那意谓着每个Unicode字符占用多个字节,因此,你需要在字符和字节之间作出区别。
(1)UTF-8编码能处理任何的Unicode字符。它也是与ASCII码向后兼容的,因此一个纯粹的ASCII码文件也能被考虑为一个UTF-8文件,而且一个碰巧只使用ASCII码字符的 UTF-8文件和拥有同样字符的ASCII码文含历件是相同的。
这个特性使得UTF-8的向后兼容性非常好,尤其使用较旧的Unix工具时。UTF-8 无疑地是在 Unix上的占优势的编码。它主要的弱点是对东方文字是非常低效的。
(2)UTF-16编码在微软的操作系统和Java环境下受到偏爱。它对西方语言是比较低效,但对于东方语言是更有效率的。一个UTF-16 的变体有时叫作UCS-2 。
(3)ISO-8859编码系列是256个字符的ASCII码的超集。他谈谨搜们不能够支援所有的Unicode码字符;他们只能支援一些特别的语言或语言家族。
ISO-8859-1,也既Latin-1,包括大多数的西欧和非洲语言,但是不含阿拉伯语。ISO-8859-2,也既Latin-2,包括许多东欧的语言,像是匈牙利语和波兰语。
Ⅳ Python中中文字符串怎么处理
如果处理的字符串中出现中文表示的字符,要想不出错,就得转成unicode编码了。具体的方法有:
1、decode(),将其他边编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码;
2、encode(),将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码;
3、unicode(),同decode(),将其他编码的字符串转换成unicode编码,如unicode(str3, 'gb2312'),表示将gb2312编码的字符串str3转换成unicode编码。
转码的时候一定要先搞明白字符串str是什么编码,然后decode成unicode,最后再encode成其他编码。
另外,对一个unicode编码的字符串在进行解码会出错,所以在编码未知的情况下要先判断其编码方式是否为unicode,可以用isinstance(str, unicode)。
不仅是中文,以后处理含非ascii编码的字符串时,都可以遵循以下步骤:
1、确定源字符的编码格式,假设是utf8;
2、使用unicode()或decode()转换成unicode编码,如str1.decode('utf8'),或者unicode(str1, 'utf8');
3、把处理后字符串用encode()编码成指定格式。
Ⅳ python字符串与url编码的转换实例
python字符串与url编码的转换实例
今天小编就为大家分享一篇python字符串与url编码的转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要应用的场景
爬虫生成带搜索词语的网址
1.字符串转为url编码
import urllib
poet_name = "李白"
url_code_name = urllib.quote(poet_name)
print url_code_name
#输出
#%E6%9D%8E%E7%99%BD
2.url编码转为字符串
import urllib
url_code_name = "%E6%9D%8E%E7%99%BD"
name = urllib.unquote(url_code_name)
print name
#输出
#李白
以上这篇python字符串与url编码的转换实例就是小编分享给大家的全部内容了篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助
Ⅵ python str与bytes编码解码
下面一张图搞懂编码、解码、编码表之间的关系。
不难看出,它们是一种根据编码表进行翻译、映射的过程:
实际上,字符串类型只有encode()方法,没有decode()方法,而bytes类型只有decode()方法而没有encode()方法。
二进制格式的数据也常称为裸数据(raw data),所以str数据经过编码后得到raw data,raw data解码后得到的str。
上面说了,编码是将字符数据转换成字节数据(raw data),解码是将字节数据转换成字符数据。在Python中字符数据也就是字符串,即str类型,字节数据也就是bytes类型或bytearray类型。
编码时,可以使用字节类型的构造方法bytes()、bytearray()来构造字节,也可以使用str类型的encode()方法来转换。
解码时,可以使用str类型的构造方法str()来构造字符串,也可以使用bytes、bytearray()类型的decode()方法。
另外需要注意的是,编码和解码的过程中都需要指定编码表(字符集),默认采用的是utf-8字符集。
例如,使用encode()的方式将str编码为bytes数据。
使用bytes()和bytearray()将str构造成bytes或bytearray数据,这两个方法都要求str->byte的过程中给定编码。
实际上,bytes()、bytearray()这两个方法构造字节数据的时候还有点复杂,因为可以从多个数据源来构造,比如字符串、整数值、buffer。如何使用这两个方法构造字节数据,详细内容参考help(bytes)和help(bytearray)给出的说明,这里给几个简单示例。
构造bytes的方式:
构造bytearray的方式:
解码是字节序列到str类型的转换。
例如,使用decode()方法进行解码"我"字,它的utf-8的编码对应为"\xe6\x88\x91":
使用str()进行转换。
当编码、解码的过程使用了不同的(不兼容的)编码表时,就会出现乱码。所以,解决乱码的唯一方式是指定对应的编码表进行编码、解码。
例如,使用utf-8编码"我"字,得到一个bytes序列,然后使用gbk解码这个bytes序列。
这里报错了,因为utf-8的字节序列里有gbk无法解码的字节。如果使用文本编辑器一样的工具去显化这个过程,得到的将是乱码字符。
原文地址: https://www.cnblogs.com/f-ck-need-u/p/10185965.html
Ⅶ Python ascii 编码 怎么转化为utf-8编码
实现代码如下:
a='abce'
#printtype(a)
b=a.decode("ascii")
#printtype(b)
c=a.decode("ascii").encode("utf-8")
#printtype(c)
在python中进行编码转换都是通过unicode作为中间值实现的。所以要先decode成unicode字符,然后再使用encode转换成utf-8编码的str。可以把注释取消了,看下转换过程中的类型。