python3的字符编码让人头疼。
这个也不是一篇介绍gbk, utf-8, unicode怎么表示英文,中文字符的基础知识总结。
网上有不少相似的文章,目前也不须要升入学习到了解各个bit位表示什么含义。html
目的:
清楚了解为何在python3不一样的编码,解码,windows,linux操做系统下,字符是否可以正确显示。python
前提:
了解不一样编码用不一样的二级制编码和长度来表示字符。
在python3中,各类字符编码之间的互相转换都要经过unicode做为中间编码转换。gbk转换成unicode,再从unicode转换成utf-8。linux
分析:
要区分4种编码解码概念,windows
1.编写代码文件时的编码。
notepad++ 在菜单“编码”中有选择,在状态栏能够看到编码类型。
pycharm 在菜单"file","editor","file encoding"中能够设置默认编码。在状态栏能够看到编码类型。编辑器
2.python3代码中申明的解码格式。
在代码中#coding=gbk。
编码声明告诉了python编译器以什么格式的编码来解码.py文件,它不会改变系统默认编码和本地默认编码,
也不是用于声明当前代码文件的编码格式的,而是声明当前代码文件的解码方式。换句话说,
代码文件的编码格式取决于你使用的编辑器,而如何解码该文件取决于文件头处的编码声明。
通常地,编码格式应当与解码格式一致,即编辑器的编码格式与编码声明应当一致。ide
注:根据代码中申明的解码类型,pycharm会自动改变编码类型,让编码类型和解码类型保持一致。这是pycharm的优势。学习
3.python解释器的默认编码格式。
当python的编译器读取.py文件时,若无编码声明,则使用系统默认编码来解码.py文件。
用 import sys, sys.getdefaultencoding() 查看编码
4.本地默认编码
本地指的才是操做系统,所以本地默认编码即操做系统的默认编码。
显然,python编译器的默认编码在不一样的操做系统中保持一致,操做系统的默认编码随操做系统的不一样而发生了改变。
用import locale, locale.getdefaultlocale()查看。 windows是gbk, linux是utf-8。操作系统
例子1:
python3 一个中文字符串(str='中')utf-8编码,代码申明解码为GBK,代码中用gbk写到(文件系统write方法)另一个文件f2,在linux中显示的过程。
分析:.net
例子2:
python3 一个中文字符串(str='中')utf-8编码,代码申明解码为GBK,代码中用uft-8写到(文件系统write方法)另一个文件f2,在linux中显示的过程。
分析:
参考文章: