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中顯示的過程。
分析:
參考文章: