python3的字符串编码问题

python3的字符串编码问题

在Python3中,有两种默认的字符编码类型,bytes和str。str表示字符Unicode字符,在Python命令行中,Unicode字符会默认的转换成可显示的字符串格式,而不会显示其本身的二进制码。我们直接用单引号或者双引号定义的字符串就是str类型

我们可以通过ord函数获取其对应的十进制数字,并通过char方法获取对应的Unicode字符。如果我们知道其十六进制代码,我们还可以直接通过十六进制代码定义字符串其格式为\uxxxx:

c='好'
d = ord(c)
chr(d)
print(d)
hex(d)

bytes表示字符在某种编码下的二进制码,如果知道某个字符串在某个字符编码下的二进制码,我们可以直接使用b’\uxxxx’的形式来定义bytes二进制码,与str类型的字符串相比,前面多了一个字母b,表示其类型为bytes。

str类型的字符串可以通过encode方法转换为bytes二进制码,同样bytes二进制码可以通过decode方法转换为str类型的字符串:

c='hello'
d = c.encode('unicode escape')
d.decode('unicode escape')
print(d)

读取文件和网络资源的时候,是bytes对象,需要先解码,就是执行decode,如果我们不确定当前文件的字符编码,我们可以使用chardet.detect获取对应的字符编码:

import chardet
a = b'hello,world'
print(a)
charset = chardet.detect(a)
print(charset)
b = a.decode(charset['encoding'])
print(b)

文件写入时的字符编码:在文件写入时,我们只能写入bytes对象,因此,我们需要将str对象以utf-8编码编码成bytes对象,再进行存储。

你可能感兴趣的:(程序,记录)