一、字符串类型
python3:
python语言有两种不同的字符串,一个用于存储文本,一个用于存储原始字节。
文本字符串内部使用Unicode存储,字节字符串存储原始字节并显示ASCII。
python3中,文本型字符串类型被命名为str,字节字符串类型被命名为bytes。
正常情况下,实例化一个字符串会得到一个str实例,如果希望得到一个bytes实例,需要在文本之前添加b字符。
python2
中也有两种字符串,不过,python3中的str类在python2中名称为unicode,但是,python3中的bytes类在python2中名称为str类。
这意味着在python3中str类是一个文本字符串,而在python2中str类是一个字节字符串。
若不使用前缀实例化字符串,则返回一个str类(这里是字节字符串!!!),如果想要得到一个文本字符串,需要在字符串前面加上u字符。
二、字符串转换
python3:
可以在str与bytes之间进行类型转换,str类包含一个encode方法,用于使用特定编码将其转换为一个bytes。于此类似,bytes类包含一个decode方法,接受一个编码作为单个必要参数,并返回一个str。另一个需要注意的是,python3中永远不会尝试隐式地在一个str与一个bytes之间进行转换,需要显式使用str.encode 或者 bytes.decode方法。
python2:
与python3不同的是,python2会在文本字符串和字节字符串之间尝试进行隐式转换。
该工作机制是,如果解释器遇到一个不同种类的字符串混合操作,解释器首先会将字节字符串转换为文本字符串,然后对文本字符串进行操作。
解释器在将字节字符串转换为文本字符串的过程中使用隐式解码,python2中默认编码几乎总是ASCII.
我们可以使用sys.getdefaultencoding 方法来查看默认编码方式。
三、读取文件
python3:
文件总是存储字节,因此,为了使用文件中读取的文本数据,必须首先将其解码为一个文本字符串。
python3中,文本正常情况下会自动为你解码,所以打开或读取文件会得到一个文本字符串。
使用的解码方式取决系统,在mac os 或者 大多数linux系统中,首选编码是utf-8,但windows不一定。
可以使用locale.getpreferredencoding()方法得到系统的默认解码方式。
python2:
python2中,无论以何种方式打开文件,read方法总是返回一个字节字符串