ubuntu下vi建立python檔案時的中文問題

2021-05-28 16:40:39 字數 1490 閱讀 9182

今天是學習python的第一天,和其他所有語言一樣,我首先就編碼問題對python的字串操作進行學習,很不幸,剛開始就遇到了問題;

首先,在ubuntu下,用vi新建乙個a.py,輸入以下**:

s = '中文';

print s;

儲存後,執行python a.py,出現了以下錯誤:

syntaxerror: non-ascii character '\xe4' in file b.py on line 2, but no encoding declared; see for details

ok,我們可以看到,python很明顯地提示我說,沒有設定編碼,那麼好,我們就為它設定以下編碼,要處理中文,我們立馬就該想到用gbk、gb2312或者unicode,好,先用gbk試一下(gb2312就不用試了,畢竟與gbk是相容的),修改a.py檔案內容:

#coding=gbk

s = '中文';

print s;

儲存後,再次執行,很悲劇,又有錯誤:

syntaxerror: 'gbk' codec can't decode bytes in position 7-8: illegal multibyte sequence

這是什麼個情況?我再用unicode試一試,為了相容ansi,我採用了utf-8,修改a.py檔案內容如下:

#coding=utf-8

s = '中文『;

print s;

儲存後,再次執行,額,神奇,搞定了,正確輸出了「中文」兩個漢字。

這是為什麼呢?檢視一下a.py的檔案儲存格式:

:set fileencodoing

輸出了 fileencoding=utf-8,可以看到a.py在我的ubuntu上預設是以utf-8格式來儲存的,想以gbk的編碼來解釋,當然行不通。

起初還以為是vi在以utf-8格式儲存檔案時,會在檔案頭插入bom,但是經過以下測試,發現不是這個問題:

#coding=gbk

import codecs;

data=open('b.py').read();

print len(data);

if data[:3] == codecs.bom_utf8:

data=data[3:];

print len(data);

輸出的長度都是36,說明沒有bom位元組,不過在windows的某些軟體就難說了,比如notepad,在儲存乙個以utf-8編碼的檔案時,會在檔案開始的地方插入三個不可見的字元(0xef 0xbb 0xbf,即bom)。

因此我們在讀取時需要自己去掉這些字元,python中的codecs module定義了這個常量:

# coding=gbk

import codecs;

data = open("a.py").read();

if data[:3] == codecs.bom_utf8:

data = data[3:];

print data.decode("utf-8");

ubuntu 下建立使用者

新建使用者的命令是useradd,修改密碼是passwd,如下 plain view plain copy sudo useradd linc sudo passwd linc 但是問題出現了,home目錄下並沒有相對應的linc目錄。原來ubuntu並沒有為我們做那麼多,先來看看useradd的選...

使用virtualenv建立虛擬python環境

環境 ubuntu 初始化環境 剛用到這個東西時,會聯想到虛擬機器和影子系統,不過相比於後兩者,virtualenv更為便捷。不需要重啟系統進入影子模式,也不需要啟動虛擬機器拖慢你的系統。你只需要通過命令建立乙個虛擬環境,不用的時候通過命令退出,甚至刪除,均可。安裝virtualenv 安裝過程可能...

Ubuntu下VI編輯器命令總結

vi編輯器有三種模式 1 命令列模式 游標移動 複製 貼上 刪除 command mode 2 插入模式 編輯文字 insert mode 3 底行模式 查詢和替換 last line mode 注意 1 當不知道處於何種模式時,按esc鍵返回到命令列模式。2 wq write quit 儲存退出 ...