1. 程式人生 > >linux之系統編碼,python編碼,文件編碼

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

python 編碼 文件編碼 linux編碼

1 前言

如果你對python2python3的中編解碼很清楚,這裏我認為你很清楚。

具體參考文檔:

python2 encodedecode函數說明.docx

“字符編碼——從ASCII開始.docx

以上所有文檔均為本地文檔。

2 Python編碼

sys.getdefaultencoding(): 獲取系統當前編碼,這裏的系統指的是python自己的內置系統,並非操作系統,即3中的python編碼

sys.setdefaultencoding(): 設置系統默認編碼,執行dirsys)時不會看到這個方法,在解釋器中執行不通過,可以先執行reload(sys),在執行 setdefaultencoding(

utf8),此時將系統默認編碼設置為utf8

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

這部分內容可參見“Python判斷當前操作系統類型以及os, sys, platform模塊簡介”

其實我認為這部分對後面的故障定位沒作用。

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

3.1 系統編碼

默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據此方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。

這部分編碼就是所謂的編輯器的編碼,例如vi命令。

補充:如你在

linux終端,直接從其他地方將文本拷貝如linux中,此時將采用系統編碼進行編碼,通過locale命令查看:

[[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]

/* */]$ more ENV.sh

#!/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 文件編碼

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

[[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編碼,文件編碼