python编码问题

为什么想讲这个问题?主要是最近自己遇到这个问题,然后就是把自己看到的一起交流一下。

记得我们在读取文件内容的时候,老是会涉及到编码解码的问题,特别是有的文件内容常用的编码还不支持,这就令人非常的烦。下面列出一行常用的读取文件内容代码。

with open('a.txt','r',encoding='utf-8') as pp:

这里面主要是三个参数,第一个是文件名,第二个是只读的方式打开文件,第三个是编码解码格式,为什么我要说是编码解码格式呢?先来普及一下基本的知识。

字节和字符;字符是人类所能识别的基础单元,比如英文单词‘love’,这个单词是由四个字母组成,四个字母中每个字母都代表我们能识别的字符单元,同理中文‘你好’,你和好分别代表2个字符单元。字符大致就可以这样简单的理解;那么字节呢?我们都知道计算机中所能识别的都是二进制位,也就是0-1串,一个字节就代表8位二进制位。

字节和字符又是怎么联系到一起呢?简单的说就是怎么把人类语言转变成计算机能读懂的语言,编码这个时候就应运而生了,编码方式的差异决定多少字节代表一个字符,比如以前常见的ASCII就是一个字节对应一个字符,相当于我制定了一个规则,然后你按照这个规则将文字(字符)转换成计算机能理解的东西(字节)。解码呢?就是编码的逆过程,用相应编码的规则将计算机内的东西(字节)转换成人类理解的东西(文字).

编码:字符到字节的转换

解码:字节到字符的转换

把这两个过程运用到文件的读取中更好理解。计算机读取文本和写入文本的方式是字节流,读取文件的时候,把字节流转换成字符,实际上就是解码过程,同时,将字符写到文件中去,实际上就是编码过程。

有的人可能说,我怎么记得python中读取文件的时候,解码后的字符都是unicode编码,这又是怎么回事?我查了下别人说的优势,有以下三点:

1.可以处理非英文内容

2.可以使用第三方库

3.接收任何的输入内容

相当于字节流解码变成unicode编码的字符,unicode字符作为python内部处理通用字符,最后编码变成其他字符。

顺便提一句,前面的with方法中无论读取还是写入,都是encoding变量后面填参数,读取对应就是解码方式,写入对应编码方式,python3默认编码方式是utf-8。

关于unicode的详细介绍以及编码的演变可以点击下面的链接:

编码演变历史

你可能感兴趣的:(python编码问题)