python3字符串编码总结str(unicode)<-->bytes
1.字符串的编码形式
字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。但是这就导致一个问题,就是unicode不仅不兼容ascii编码,而且会造成空间的浪费,于是uft-8编码应运而生了,utf-8编码对英文使用一个字节的编码,由于这样的特点,很快得到全面的使用。
1.1 ASCII
美国信息交换标准码。 在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),但其最高位(b7)用作奇偶校验位。ASCII(American Standard Code for Information Interchange),是一种单字节的编码。计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号。不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础。
1.3 Unicode、UTF-8
Unicode是业界的一种标准,它可以使电脑得以呈现世界上数十种文字的系统。 后来,有人开始觉得太多编码导致世界变得过于复杂了,让人脑袋疼,于是大家坐在一起拍脑袋想出来一个方法:所有语言的字符都用同一种字符集来表示,这就是Unicode。
Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
1.4 GB2312、GBK、GB18030
GB是中国荒谬的国家标准。GB2312、GBK、GB18030各为前一个的扩展。
2.字节码bytes
python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。
3.python2与python3字符串编码的区别
python默认编码
default encodings in Python are:
Python 2.x: ASCII
Python 3.x: UTF-8
A. python3默认使用的是str类型对字符串编码,默认使用bytes操作二进制数据流,两者不能混淆!!
B. Python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值,后者的实例包含Unicode字符。
C. Python2也有两种表示字符序列的类型,分别叫做str和Unicode,与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。
str(unicode)类型是基准!
要将str类型转化为bytes类型,使用encode()内置函数;反过来,使用decode()函数。
示例如下:
>>> s = "木又盛,你好!"
>>> type(s)
<class 'str'>
>>> t = s.encode("gbk")
>>> t
b'\xc4\xbe\xd3\xd6\xca\xa2\xa3\xac\xc4\xe3\xba\xc3\xa3\xa1'
>>> type(t)
<class 'bytes'>
>>> t.decode("gbk")
'木又盛,你好!'
4.len()函数
要计算str包含多少个字符,可以用len()函数
>>> len('ABC')
3
>>> len('中文')
2
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
最后,还有一个疑问:网页的编码??
>>>import urllib.request
>>>response = urllib.request.urlopen('http://www.baidu.com')
>>>html = response.read()
>>>type(html)
<class 'bytes'>
要正常显示的话,就要使用decode()方法了。
上一篇: CentOS中如何检测IP冲突
推荐阅读
-
Python3中编码与解码之Unicode与bytes的讲解
-
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
-
Python3中编码与解码之Unicode与bytes的讲解
-
python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)
-
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
-
python3字符串编码总结str(unicode)<-->bytes
-
python3中的unicode和bytes,让编码更流畅
-
python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)