关于编码那些事儿

1. 字符串的编码形式

字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。但是这就导致一个问题,就是unicode不仅不兼容ascii编码,而且会造成空间的浪费,于是uft-8编码应运而生了,utf-8编码对英文使用一个字节的编码,由于这样的特点,很快得到全面的使用。

2. 字节码bytes
2.1字节码使用举例
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s1='abc'
>>> s1.encode('utf-8')
b'abc'
>>> s2=s1.encode('utf-8')
>>> s2
b'abc'
>>> type(s2)

2.2. 字节码的修改

要修改bytes中的某一个字节必须要将其转换为bytearray以后才可以。如下:

>>> s2=bytearray(s2)    # 转换为bytearray
>>> type(s2)

>>> s2
bytearray(b'abc')
>>> s2[0]=110
>>> s2
bytearray(b'nbc')
2.3. 字节码bytes与字符之间的关系

将表示二进制的bytes进行适当编码就可以变为字符了,比如utf-8或是gbk等等编码格式都可以。(所以我个人的理解就是:有utf-8格式的bytes,也有gbk格式的bytes等等)。

2.4. 字节码bytes与unicode编码的相互转换

这一部分非常重要,所以放在后面具体讲。

3.python2与python3字符串编码的区别

python3默认使用的是str类型对字符串编码,默认使用bytes操作二进制数据流,两者不能混淆!!
Python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值,后者的实例包含Unicode字符。Python2也有两种表示字符序列的类型,分别叫做str和Unicode,与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。

3.1 python3中str默认为unicode编码
>>> s1='abc'
>>> s2='中国'
>>> s3=s1.encode('utf-8')
>>> s3
b'abc'
>>> s4=s2.encode('utf-8')
>>> s4
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s3.decode()
'abc'
>>> s4.decode()
'中国'

s1和s2通过encode('utf-8')都成了二进制文件,字节转换为字符,想要恢复只需decode即可。
str类型有三种类型【basestring】【str】【unicode】。

3.2 python2中str默认是bytes字节类型

字节类型——>字符类型:s.decode('gbk') # 转换为unicode编码

>>>s='中国'
>>>s.decode('gbk').encode('utf-8')     # 相当于s=u'中国'
3.3 Windows系统中文件的编码
  1. 英文文件默认是ASCII编码。
    2.简体中文文件默认是GB2312编码。
  2. 繁体中文文 件默认是Big5编码。

你可能感兴趣的:(关于编码那些事儿)