用python寫檔案輸出,解決輸出的中文為亂碼問題

2021-06-18 08:31:20 字數 1661 閱讀 2600

(1)、python**檔案的編碼

py檔案預設是ascii編碼,中文在顯示時會做乙個ascii到系統預設編碼的轉換,這時就會出錯:syntaxerror: non-ascii character。需要在**檔案的第一行或第二行新增編碼指示:

1 # coding=utf-8 ##以utf-8編碼儲存中文字元

2 print '中文'

像上面那樣直接輸入的字串是按照**檔案的編碼來處理的,如果用unicode編碼,有以下三種方式:

1 s1 = u'中文' #u表示用unicode編碼方式儲存資訊

2 s2 = unicode('中文','gbk')

unicode是乙個內建函式,第二個引數指示源字串的編碼格式。

decode是任何字串具有的方法,將字串轉換成unicode格式,引數指示源字串的編碼格式。

encode也是任何字串具有的方法,將字串轉換成引數指定的格式。

(2)、字串的編碼

用 u'漢字' 構造出來的是unicode型別,不用的話構造出來是str型別

str的編碼是與系統環境相關的,一般就是sys.getfilesystemencoding()得到的值

所以從unicode轉str,要用encode方法

從str轉unicode,所以要用decode

例如:# coding=utf-8 #預設編碼格式為utf-8

s = u'中文' #unicode編碼的文字

print s.encode('utf-8') #轉換成utf-8格式輸出

但當python中間處理非ascii編碼時,經常會出現如下錯誤:

unicodedecodeerror: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)

0x??是超出128的數字,python在預設的情況下認為語言的編碼是ascii編碼,所以無法處理其他編碼,需要設定python的預設編碼為所需要的編碼。

乙個解決的方案是在**中新增:

import sys

reload(sys)

sys.setdefaultencoding('utf-8') (其中utf-8為你想輸出的字元編碼)

解釋:

sys.setdefaultencoding方法在python匯入site.py後就刪除了(具體**檢視site.py就可以看到)因此如果想用的話可以再重新load進入

總結:

u=u'unicode編碼文字'

g=u.encode('gbk') #轉換為gbk格式

print g #此時為亂碼,因為當前環境為utf-8,gbk編碼文字為亂碼

str=g.decode('gbk').encode('utf-8') #以gbk編碼格式讀取g(因為他就是gbk編碼的,需要事先知道它是gbk編碼)並轉換為utf-8格式輸出

print str #正常顯示中文(同檔案輸出)

安全的方法:

s.decode('gbk','ignore').encode('utf-8′) #以gbk編碼讀取(當然是讀取gbk編碼格式的文字了)並忽略錯誤的編碼,轉換成utf-8編碼輸出

python輸入檔案 python 檔案的輸入輸出

一 檔案的輸入 在前面python基礎命令中,我們已經介紹過輸入,在此舉幾個例子解釋一下兩者的區別 raw input 函式從標準輸入讀取乙個行,並返回乙個字串 去掉結尾的換行符 input 函式和 raw input 函式基本類似,但是 input 可以接收乙個python表示式作為輸入,並將運算...

python 解決logging模組重複輸出日誌

場景 多個py檔案呼叫logging,從主檔案匯入另外的py檔案時日誌會反覆輸出幾條 原因參考 解決 將logger例項放到單獨的py檔案,其他檔案都import該py my log.py usr bin python encoding utf 8 配置檔案 import configparser ...

用檔案輸入 or 輸出

c define local 可以去掉改為在編譯引數裡加上 dlocal ifdef local freopen inut.txt r stdin freeopen output.txt w stdout endiffile fin,fout fin fopen input.txt r rb 為讀取...