python3字符串编码和解码

虽然这是一个很基础的问题,但是博主一直都是瞎猫碰死耗子的心态去试,因为对于中文就那么几种encode方式 - -!


编码解码
  • 什么是encodedecode

一般来说由一种字符串变成二进制串的过程叫encode;反之称为decode

  • 从保存文档开始讲起

通常我们写一个文档时,无论是通过word / pycharm / notepad++这些,都会有一个东西叫解码方式,出现在右下角,并且选不好就出现乱码。

why?
首先,我们知道字符串存在硬盘中,实际上存放的是二进制数,那怎么存放二进制数,二进制怎么对应起我们想要的字符,这就通过了我们规定的编码规则了。

我们通过输入法,输入的字符串到硬盘二进制的过程叫encode;打开二进制文件在编辑器中显示字符的过程叫decode

这是对于文件编辑器来说。

python3字符

python3文件中只有两种字符str型和bytes
其中bytes就是二进制串的十六进制表示,str在python3是Unicode标准并且可以选择不同编码表示,如utf- GBK ISO-等。
可以在python代码的首行指定# -*- coding:gbk -*-,或者在pycharm的右下角选择
关于Unicode这些,可以看:https://blog.csdn.net/qq_24326765/article/details/82183167

其实你把python文件当成一个普通的字符文件就很容易理解上面的东西了。
只不过python因为可以调用函数实现encode和decode的操作。

看看python3如何指定解码方式读取文档
特地用GBK写了一个test文件,只有一行:

i love 中国!

代码:

# -*- coding:gbk -*-

a = 'i love 中国!'
print(a.encode('gbk'))
print(a.encode('utf-8'))
with open('test_en_decode','rb') as f:
    a = f.readlines()
    print(a)
    print(a[0].decode('gbk'))

结果:

b'i love \xd6\xd0\xb9\xfa!'
b'i love \xe4\xb8\xad\xe5\x9b\xbd!'
[b'i love \xd6\xd0\xb9\xfa!']
i love 中国!

发现GBK utf-两者编码方式不一样,得到的二进制串结果也不一样。
并且'rb'方式open最后得到得结果也可以进行对应编码方式得decode,而不出现乱码。

至于为什么python在encode后,英文字符不是二进制串,应该是编译器打印时,ASCII能对应得就转换了
.#

你可能感兴趣的:(python3字符串编码和解码)