linux之系統編碼,python編碼,文件編碼
1 前言
如果你對python2和python3的中編解碼很清楚,這裏我認為你很清楚。
具體參考文檔:
“python2 encode和decode函數說明.docx”
“字符編碼——從ASCII開始.docx”
以上所有文檔均為本地文檔。
2 Python編碼
sys.getdefaultencoding(): 獲取系統當前編碼,這裏的系統指的是python自己的內置系統,並非操作系統,即3中的python編碼。
sys.setdefaultencoding(): 設置系統默認編碼,執行dir(sys)時不會看到這個方法,在解釋器中執行不通過,可以先執行reload(sys),在執行 setdefaultencoding(‘
sys.getfilesystemencoding(): 獲取文件系統使用編碼方式,Windows下返回’mbcs’,mac下返回’utf-8’.
這部分內容可參見“Python判斷當前操作系統類型以及os, sys, platform模塊簡介”
其實我認為這部分對後面的故障定位沒作用。
3 系統編碼,python編碼,文件編碼
3.1 系統編碼
默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據此方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。
這部分編碼就是所謂的編輯器的編碼,例如vi命令。
補充:如你在
[[email protected]~]$ 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
[[email protected]
#!/bin/bash
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
[[email protected]]$ source ENV.sh
[[email protected]]$ 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 文件編碼
文本的編碼方式,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;
[[email protected] Python3]$ ls
ENV.sh sendmail.py
[[email protected]]$ locale
LANG=GBK
….
LC_ALL=C
這樣的環境下去查看文件編碼:
中文顯示直接亂碼了,使用setfileencoding查看壓根沒有輸出:
環境初試回去後查看
[[email protected]]$ source ENV.sh
[[email protected]]$ locale
LANG=en_US.UTF-8
…
LC_ALL=en_US.UTF-8
4 總結
就是你再牛逼的程序員,不推薦去動服務器的編碼,除非服務器就只跑你自己的程序。
本文出自 “90SirDB” 博客,請務必保留此出處http://90sirdb.blog.51cto.com/8713279/1925618
linux之系統編碼,python編碼,文件編碼