爬虫中的关于字符串的一些理解

1.基本概念

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等

字符集(Character set)是多个字符的集合

字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等

ASCII编码是1个字节,而Unicode编码通常是2个字节。

UTF-8是Unicode的实现方式之一,UTF-8是它是一种变长的编码方式,可以是1,2,3个字节

2.Python3中的字符串

Python3中两种字符串类型

 1.str:unicode的呈现形式
 2.bytes: 字节类型,互联网上的数据都是以二进制的方式(字节类型)传输的
使用方法:
 1.str使用encode方法转化为bytes
 2.bytes通过decode转化为str
注意:编码方式与解码方式必须一样,否则就会出现乱码

3.Python2中的字符串

Python2中字符串有两种类型

 1.unicode类型
 2.字节类型

在Python2中,字符串无法完全地支持国际字符集和Unicode编码。为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型。要输入Unicode字符串,要在第一个引号前加上'u'。

Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串

3.1.python2中的字节类型字符串
python2 中定义字符串的时候,会自动将字符串转换为合适编码的字节字符串,比如中文:自动转换为utf-8编码的字节字符串

举个例子(linux终端,默认终端的编码utf-8):

>>> a = "你好"  #如此定义字符串的时候,其为字节类型
>>> a
'\xc4\xe3\xba\xc3'
>>> type(a)
<type 'str'>

 上面的这种定义方式和在字符串前面加上b的效果一样,可以对其解码,转化为str类型

>>> c =b"你好"
>>> c
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> type(a)
<type 'str'>
>>> c.decode("utf-8")
u'\u4f60\u597d'

 3.2 Python2中的Unicode类型 
如果需要定义Unicode字符串,即非字节类型的字符串的时候需要在前面加上‘u’

>>> e = u"你好"
>>> e
u'\u4f60\u597d'
>>> type(e)
<type 'unicode'>
>>> e.encode('utf-8')
'\xe4\xbd\xa0\xe5\xa5\xbd'

3.3 python2中字节类型和uicode类型的转化
  1.字节类型通过decode转化为Unicode类型
  2.Unicode类型通过很encode方法转化为字节类型
  3.方法的使用和Python3相同,但是在方法中默认的编码解码方式为ASCII,对中文需要手动指定为utf-8

4.文件编码
  在Python中保存字符串到文件中,文件编码取决于第一次写入的字符串编码,如果后续写入的字符串编码和文件编码不一致时,则出现乱码(Python写入文件没有Unicode编码的文件编码)。
  4.1 Python3只要是写入Unicode字符串,都按‘w’模式写入,除非是 非Unicode(gbk、utf8、jpg、mp4等非Unicode数据),按 "wb" 写入。
  4.2Python2只要是写入字符串,都按 "w" 模式写入,除非是 图片、音频、视频这种非字符串数据,按 "wb" 模式写入。

 

posted @ 2018-08-25 17:53  只要平凡  阅读(196)  评论(0编辑  收藏  举报