以Python为例说明字符串和字节串

以 Python 为例说明字符串和字节串

什么是字符串

字符串(string)是由字符(character)构成的序列(sequence)。例如abc北京就是由abc构成的一个字符串。

什么是字节串

计算机中所有的东西都需要数值来表示,字符也不例外。每个字符需要若干个字节表示(取决于编码的方案)。P.S. 字节是最小的存储单位。

例如,采用 UTF-8 编码,上述五个字符对应的编码如下:

a\x61

b\x62

c\x63

\xe5\x8c\x97

\xe4\xba\xac

因此,abc北京在 UTF-8 编码方案下对应的字节串是\x61\x62\x63\xe5\x8c\x97\xe4\xba\xac

如果采用 GB2312 编码,上述五个字符对应的编码如下:

a\x61

b\x62

c\x63

\xb1\xb1

\xbe\xa9

因此,abc北京GB2312编码方案下对应的字节串是\x61\x62\x63\xb1\xb1\xbe\xa9

从上面可以发现,同样的字符串,不同的编码方案可能会产生不同的字节串。

应用

打开文件“乱码”

文本在计算机中是以字节串的形式存储的,当编辑器打开文件时,便会按照某一种编码方案对硬盘中存储的字节串进行解码,如果解码过程用的编码方案与编码过程用的编码方案一致便可以正常显示,如果不一致就可能出现乱码的情况。

Python 中的文件 IO

P.S. 这一部分是自己的理解,真实性有待核查。

在 Python 中,当我们用open函数打开文件时,需要指定编码类型:

1
2
# 若不指定,Python 会根据 OS 提供一个默认值
f = open("a.txt", encoding="utf-8")

当文件被从计算机中读出时,在 Python 的文件对象中便存下了字节串和该文件的编码。例如,将字符串abc北京从文件中读出时,计算机中存储的便是\x61\x62\x63\xe5\x8c\x97\xe4\xba\xac这一串字节串和编码方案utf-8。当需要赋值给字符串变量时,字符串变量s的字节码就是在unicode编码方案下abc北京对应的字节码。

将字符串abc北京写入文件中时,也是先检查文件的编码方案,如GB2312,然后将abc北京GB2312下的编码存入文件中。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!