python中的编码与解码

一, 先了解什么是编码和解码

本文本主要讲解python中的字符编码,希望大家有所收获
废话不多说,个人理解:
编码:字符—以特定的编码方式—>字节
解码:字节—以特定的编码方式—>字符

二,编码方式都有哪些

目前常见的几种编码如下,具体请百度,在此不作详细解释(百度一大堆)

  1. ASCLL
  2. Unicode字符集
  3. UTF-8
  4. GBK/GB2312/GB18030

三,python 中负责编码和解码的函数

个人感觉python2中的编码非常的不友好,而目前python3中以“UTF-8” 作为系统默认编码让人省心不少

sys.getdefaultencoding() #查看默认编码方式

对应关系:
str(字符串)
bytes(二进制字节) python3 中在字符引号前加‘b’ 表示

a='type is str'
b=b'type is bytes'
print(type(a))
print(type(b))

结果为



编码:str 转化为bytes
解码:bytes 转化为str

接下来是本文的重点 python编码和解码的函数隆重登场

encode(): 编码:str 转化为bytes

decode(): 解码:bytes 转化为str

str.encode(encoding='UTF-8',errors='strict') 
str.decode(encoding='UTF-8',errors='strict')

encoding – 要使用的编码,如"UTF-8"。
errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。

下面分别以utf-8,unicode,gbk的方式解码,程序和结果如下:

a='你好! 世界'
s1=a.encode() # 默认是utf-8
s2=a.encode('unicode-escape')  # 以unicode
s3=a.encode('gbk')#以 gbk的方式
# 结果如下
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c' #utf-8的结果
b'\\u4f60\\u597d\\uff01 \\u4e16\\u754c' #unicode的结果
b'\xc4\xe3\xba\xc3\xa3\xa1 \xca\xc0\xbd\xe7' #gbk的结果

四,raw_unicode-escape 和 unicode-escape

简答:raw_unicode-escape 是直接转化字符串类型,而 unicode_escape 是编码或解码成指定的数据类型
1 encode(‘unicode-escape’)可将此str编码为bytes类型, 内容则是unicode形式
2 decode(‘unicode-escape’)可将内容为unicode形式的bytes类型转换为str
3 encode(‘raw_unicode_escape’)将此str转化为bytes
4 decode(‘raw_unicode_escape’)输出内容为bytes形式的字符串
以下贴出我的试验结果,最好自己写以下代码实践一下,能够快速助自己理解

encode(‘unicode-escape’)可将此str编码为bytes类型, 内容则是unicode形式

a='\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
en=a.encode('unicode_escape')
de=en.decode()
print('unicode_escape的类型  %s'% type(en))
print(en)
print('unicode_escape的类型  %s'% type(de))
print(de)
结果如下:
raw_unicode_escape的类型  
b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xef\\xbc\\x81 \\xe4\\xb8\\x96\\xe7\\x95\\x8c'
raw_unicode_escape的类型  
\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c

encode(‘raw_unicode_escape’)将此str转化为bytes, 再decode为str

a='\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
en=a.encode('raw_unicode_escape')
de=en.decode()
print('raw_unicode_escape的类型  %s'% type(en))
print(en)
print('raw_unicode_escape的类型  %s'% type(de))
print(de)
结果如下:
raw_unicode_escape的类型  
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
raw_unicode_escape的类型  
你好! 世界

decode(‘unicode-escape’)可将内容为unicode形式的bytes类型转换为str

a=b'\u4f60\u597d \u4e16\u754c\uff01'
de=a.decode('unicode-escape')
print(type(a))
print('unicode_escape的类型  %s'% type(de))
print(de)
结果如下:

unicode_escape的类型  
你好 世界!

decode(‘raw_unicode_escape’)输出内容为bytes形式的字符串

a=b'\u4f60\u597d \u4e16\u754c\uff01'
de=a.decode('raw_unicode-escape')
print(type(a))
print('unicode_escape的类型  %s'% type(de))
print(de)
结果如下:

unicode_escape的类型  
你好 世界!

最后,创作不易,希望大家赞一下!!!!

你可能感兴趣的:(python,字符串,unicode)