若是你對python2和python3的中編解碼很清楚,這裏我認爲你很清楚。python
具體參考文檔:linux
「python2 encode和decode函數說明.docx」程序員
「字符編碼——從ASCII開始.docx」vim
以上全部文檔均爲本地文檔。bash
sys.getdefaultencoding(): 獲取系統當前編碼,這裏的系統指的是python本身的內置系統,並不是操做系統,即3中的python編碼。服務器
sys.setdefaultencoding(): 設置系統默認編碼,執行dir(sys)時不會看到這個方法,在解釋器中執行不經過,能夠先執行reload(sys),在執行 setdefaultencoding(‘utf8’),此時將系統默認編碼設置爲utf8。編輯器
sys.getfilesystemencoding(): 獲取文件系統使用編碼方式,Windows下返回’mbcs’,mac下返回’utf-8’.ide
這部份內容可參見「Python判斷當前操做系統類型以及os, sys, platform模塊簡介」函數
其實我認爲這部分對後面的故障定位沒做用。編碼
默認寫源碼的編輯器的編碼方式。它表明源碼文件內的全部內容都是根據此方式編碼成二進制碼流。存入到磁盤中的。linux下經過locale命令查看。
這部分編碼就是所謂的編輯器的編碼,例如vi命令。
補充:如你在linux終端,直接從其餘地方將文本拷貝如linux中,此時將採用系統編碼進行編碼,經過locale命令查看:
[Asion@mobile220~]$ locale
LANG=GBK
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
[Asion@mobile220Python3]$ more ENV.sh
#!/bin/bash
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
[Asion@mobile220Python3]$ source ENV.sh
[Asion@mobile220Python3]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
指python內設置的解碼方式。若是不設定的話,python默認的是ascii解碼方式。若是python源代碼文件中不出現中文的話,這個地方怎麼設定應該不會問題。設定方法:在源碼文件開頭(必定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8
文本的編碼方式,linux下vim利用set fileencoding查看。
注意使用這個命令查看編碼時,需保證locale下的
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
與你當時編碼這個文件時一致,不然顯示不出來。
PS:當時我vi sendmail.py的文件編碼是utf-8,即locale下顯示是en_US.UTF-8;
[Asion@mobile220 Python3]$ ls
ENV.sh sendmail.py
[Asion@mobile220Python3]$ locale
LANG=GBK
….
LC_ALL=C
這樣的環境下去查看文件編碼:
中文顯示直接亂碼了,使用setfileencoding查看壓根沒有輸出:
環境初試回去後查看
[Asion@mobile220Python3]$ source ENV.sh
[Asion@mobile220Python3]$ locale
LANG=en_US.UTF-8
…
LC_ALL=en_US.UTF-8
就是你再牛逼的程序員,不推薦去動服務器的編碼,除非服務器就只跑你本身的程序。