python编码

Posted yhengwei2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python编码相关的知识,希望对你有一定的参考价值。

py2编码

py2中的数据类型:str和unicode

 

str存储的是对应的字节,一个汉字占3个字节

# -*- coding: UTF-8 -*-
s="余hello"
print len(s)    #8
print(repr(s))  #‘xe4xbdx99hello‘
print(type(s))  #<type ‘str‘>

 

unicode存储是对应的unicode

# -*- coding: UTF-8 -*-
s=u"余hello"
print len(s)    #6
print(repr(s))  #u‘u4f59hello‘
print(type(s))  #<type ‘unicode‘>

 

py2特点:

print "余"+u"最帅"      报错

print "hello"+u"yu"    正确

py2编码的最大特点是Python 2 将会自动的将bytes数据解码成 unicode 字符串,Python 2 悄悄掩盖掉了 byte 到 unicode 的转换,让程序在处理 ASCII 的时候更加简单。你复出的代价就是在处理非 ASCII 的时候将会失败。

再来看看encode()和decode()两个basestring的实例方法,理解了str和unicode的区别后,这两个方法就不会再混淆了:

技术分享图片

 

py3编码

py3里是str和bytes数据类型

str对应的是unicode,bytes对应的是bytes

技术分享图片

 

import json

s=苑昊
print(json.dumps(s))   #"u82d1u660a"
b1=s.encode(utf8)

print(b1,type(b1))     #b‘xe8x8bx91xe6x98x8a‘ <class ‘bytes‘>

print(b1.decode(utf8))#苑昊
# print(b1.decode(‘gbk‘))# 鑻戞槉

b2=s.encode(gbk)
print(b2,type(b2))  #‘xd4xb7xeaxbb‘ <class ‘bytes‘>
print(b2.decode(gbk)) #苑昊

 

默认编码

py2默认的ASCII码,在程序开头需要加上#-*- coding: UTF-8 -*-,如果不加上这么一句话,程序一旦出现中文就会报错,对于中文这些特殊字符无法编码。

 

以上是关于python编码的主要内容,如果未能解决你的问题,请参考以下文章

使用非utf-8编码在Python中解析XML

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

Python之如何优雅的重试

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

常用python日期日志获取内容循环的代码片段

python 有用的Python代码片段