1. 如图:
p = "\u65e0\u6cd5\u8bc6\u522b\u5c5e\u6027\u201cphysical_network, network_type\u201d"
print p.encode('utf-8').decode('unicode_escape')

》
无法识别属性“physical_network, network_type”

p = "\u65e0\u6cd5\u8bc6\u522b\u5c5e\u6027\u201cphysical_network, network_type\u201d"
p2 = "\u8d26\u6237\u8bbe\u5907"
print p2.decode('unicode_escape').encode('utf-8')
print p.decode('unicode_escape').encode('utf-8')# 将字符串p 不管之前什么格式,先解码成python内部的unicode编码集,读取文件时再反向转成原格式,然后再进行utf-8 编码
print p2.decode('unicode_escape').encode('utf-8')
print p.encode('utf-8').decode('unicode_escape')# 将字符串p 编码成utf-8格式,再进行码成python内部的unicode编码集,读取文件时再反向转成原格式utf-8.
print p.decode('unicode_escape')

print isinstance(p2,unicode)

账户设备
无法识别属性“physical_network, network_type”
账户设备
无法识别属性“physical_network, network_type”
无法识别属性“physical_network, network_type”
False

unicode_escape编码集,将unicode内存编码值直接存储.
也就是说,将Unicode内存编码值进行存储,读取文件时,再反向转换回来
在python中,unicode是内存编码集,一般我们将数据存储到文件时,需要将数据先编码为其他编码集,比如utf-8、gbk等

如图中例子的两处说明:
将字符串p 不管之前什么格式,先解码成python内部的unicode编码集,读取文件时再反向转成原格式,然后再进行utf-8 编码
将字符串p 编码成utf-8格式,再进行码成python内部的unicode编码集,读取文件时再反向转成原格式utf-8.
所以最后 这两个虽然encode和decode 换了位置,但输出结果相同

字节串是给计算机看的, unicode是给人看的,做数据传输时,先encode编码成字节串,进行传输,当我们拿到后,需要decode解吗成unicode进行操作

pp = "你好,这个世界"
ppp = json.dumps(pp)
print ppp

》
"\u4f60\u597d\uff0c\u8fd9\u4e2a\u4e16\u754c"

#decode(‘utf-8’) 把 UTF-8 转化为 Unicode 编码

#encode(‘utf-8’) 把 Unicode 转化为 UTF-8 编码

encode:编码
decode:解码
python内部编码方式为unicode,decode将其他编码方式转换成unicode编码方式,encode将unicode转换成其他编码方式。
因此unicode相当于一个中转:
(1)decode->unicode->encode 
(2)encode->unicode->decode 

3. decode和encode的区别

为什么会出现乱码呢?因为在文件存的时候格式和读取时候格式不一致就会乱码了。

字符串在python内部的表示是unicode编码,也可以说现在的内存是unicode编码格式,硬盘是utf-8。平常的数据操作都是先把数据读取到内存中,所以内存中都是unicode编码格式。所以我们平常在做编码转换时候,通常用unicode作为中间编码。先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码格式

decode的作用是将二进制数据解码成unicode编码,如str1.decode(‘utf-8’),表示将utf-8的编码字符串解码成unicode编码。

简单的来说:decode就是把二进制数据(bytes)转化成人看的懂得英文或者汉字(decode用的比较多)

encode的作用是将unicode编码的字符串编码成二进制数据,如str2.encode(‘utf-8’),表示将unicode编码的字符串编码成utf-8。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
代码中字符串的默认编码与代码文件本身的编码一致。

如:s=‘中文’
如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u’中文’

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:
isinstance(s,unicode) #用来判断是否为unicode

用非unicode编码形式的str来encode会报错

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐