编码
1.计算机只认识0和1,为了让计算机识别字符,字符与二进制串需要一种对应关系,在这个关系中一个二进制串能唯一标识一个字符即可,这就是编码。
2. 编码有很多种。例如 ACSII, gb2312, gbk, gb18030, unicode, utf-8, utf-16, utf-32等。具体编码可以查看网上其他详细讲解。
3. 一种编码可以理解为一种语言。汉语、英语、法语。 一个法国人是看不懂用汉字写的文章。
4. 代码和文件是保存在磁盘等存储介质上的。每个代码文件和普通文件都是用一种编码存储的。
5.读取文件时,需要知道具体的编码才能读出有效内容,否则用错编码,就会得到乱码。这就好比,用utf-8的二进制串与字符对应关系解码(翻译)gb2312的文件,读出的内容肯定不对。
6. 一种编码文件里,可能存在其他的编码。例如,utf-8编码文件里,有几个字节是gb2312编码,在utf-8里没有对应的字符,这也就导致,没有一种单一的编码可以完全解析这个文件。再比如,一篇文章里,既有中文,又掺杂着几句法语。
python
- python内存处理的都是unicode编码,它从磁盘上读取的代码程序、和普通文件都要转成unicode才能被正确识别。好比python是个外星人,你想让它干活,不管你说的是英语、汉语、法语,都需要被翻译成它能听的懂的话。
python在默认情况下,用utf-8去解码每个文件,如果文件指定了编码,则按指定的编码解码文件。
notepad++
- 自由选择用哪种编码查看文件。也就是说,可以指定编码来翻译磁盘上的二进制串,匹配不上的二进制串就会出现乱码。
- 改变字符的编码。用gb2312查看一个utf-8编码的文件,然后添加中文 ’你好‘(此时对应的二进制编码是gb2312),保存,通过这种方式,就可以使同一文件中有不同的编码存在。
小结:
编码:按照一定的规则,将字符转为二进制串
解码:按照一定的规则,将二进制串转为字符
转换的过程中,如果规则选择的不对,就会出现误转或找不多对应关系的情况