linux之系統編碼,python編碼,文件編碼

1     前言

若是你對python2python3的中編解碼很清楚,這裏我認爲你很清楚。python

具體參考文檔:linux

python2 encodedecode函數說明.docx程序員

「字符編碼——從ASCII開始.docxvim

以上全部文檔均爲本地文檔。bash

2     Python編碼

sys.getdefaultencoding(): 獲取系統當前編碼,這裏的系統指的是python本身的內置系統,並不是操做系統,即3中的python編碼服務器

sys.setdefaultencoding(): 設置系統默認編碼,執行dirsys)時不會看到這個方法,在解釋器中執行不經過,能夠先執行reload(sys),在執行 setdefaultencoding(utf8),此時將系統默認編碼設置爲utf8編輯器

sys.getfilesystemencoding(): 獲取文件系統使用編碼方式,Windows下返回’mbcs’,mac下返回’utf-8.ide

這部份內容可參見「Python判斷當前操做系統類型以及os, sys, platform模塊簡介」函數

其實我認爲這部分對後面的故障定位沒做用。編碼

3     系統編碼,python編碼,文件編碼

3.1   系統編碼

默認寫源碼的編輯器的編碼方式。它表明源碼文件內的全部內容都是根據此方式編碼成二進制碼流。存入到磁盤中的。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

3.2   python編碼

python內設置的解碼方式。若是不設定的話,python默認的是ascii解碼方式。若是python源代碼文件中不出現中文的話,這個地方怎麼設定應該不會問題。設定方法:在源碼文件開頭(必定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8

3.3   文件編碼

文本的編碼方式,linuxvim利用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

這樣的環境下去查看文件編碼:

wKioL1kYVbiTKgKZAAB1PfiJUvg804.png-wh_50


中文顯示直接亂碼了,使用setfileencoding查看壓根沒有輸出:

wKiom1kYVbjA3fupAACAl5VVuVg864.png-wh_50

環境初試回去後查看

[Asion@mobile220Python3]$ source ENV.sh

[Asion@mobile220Python3]$ locale

LANG=en_US.UTF-8

LC_ALL=en_US.UTF-8

wKioL1kYVbnxeKpKAACFKDKAlaI397.png-wh_50

4     總結

就是你再牛逼的程序員,不推薦去動服務器的編碼,除非服務器就只跑你本身的程序。

相關文章
相關標籤/搜索