下面是一张pycharm的编码配置截图:
为什么要使用utf-8?GBK是什么?unicode又是什么?with no bom是什么?with bom又是什么?
先从为什么需要字符编码来说起吧?
我们知道计算机只能处理数字:0和1 ,如果要处理文本那么就得把文本转换成数字。最早期外国人为了让计算机能够理解他们的英文,就把一个字节从(最高位没用到哦) 0~127 全部都给编码了。最后弄出来了个对照表,来表示生活中会出现的字符,这个对照表就是大家熟知的ASCII对照表。表中的编码称为ASCII码。
一个ASCII码对照表就秒天秒地了么?
由于中国文字博大精深,外国人哪能料想一个字节的ASCII表示不了中文了;于是中国有位牛人编制出了一套新的编码表:占用了两个字节、还和ASCII不冲突。然后就解决了中文在计算机中的显示问题,后来慢慢就出来了一个叫GB2312的编码,为广大汉字使用者带来福音。
能表示汉字就算完事儿了么?
世界上有几百种语言 ,日本人、韩国人相继推出了他们的编码;编码越来越多,各国语言混合在一起就会出现乱码。所以一种号称能够统一万国语言的编码出现了,他就是后世广为使用的Unicode码:Unicode码通常使用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
再完善一些:
日子久了,人们吐槽:一个英文字母根本就占不了两个字节啊?本着节约不浪费的原则,国际组织又推出了一种叫UTF-8的编码,也称可变长度字符编码。好了这下问题都解决了。根据具体情况将Unicode字符编成1-6个字节,时至今日 utf-8编码被广泛运用。
BOM:Byte Order Mark--定义字节顺序:
数据在网络传输中分两种顺序:大头和小头。UTF-8编码不需要使用BOM来表明字节顺序,一般我们设置文件编码格式的时候,通常会遇到With No BOM 和 With BOM ,选UTF-8 With NO BOM或者UTF-8 Without BOM就行了。
最后:
Python诞生时间比Unicode编码还要早,所以早期的PYTHON是使用ASCII编码来表读文件的。
1、我们写Python或者其它项目都习惯地将编译器调成UTF-8 编码,这样大家整整齐齐以防乱码。
2、我们也会经常在.py文件的头部看到这样的声明:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
告诉python编译器,去以utf-8编码去加载所有字符。