如果你想進行Tkinter和wxPython編程,想要知道一般的widget的使用方法和屬性介紹,英文又不是太好的話,我推薦你,你可以去看看《Python與Tkinter編程》這本書,里面392頁到538頁的附錄B和附錄C選擇了常用的函數和近乎所有的屬性進行介紹,精彩不容錯過。
我上面提到的這個工具很快做好了。可以把沒有查詢過的函數進行查詢,并保存關鍵字key和查詢結果info,便于下次直接從列表list中翻出來看;要是發(fā)現沒有查過,則手動添加到列表list——就是這樣一個簡單的小工具。一切看上去都很順利。但是問題也來了:英文的info打開后,解釋里面有的單詞不知道含義,查完單詞之后想寫在info里面,保存之后可以下次直接從硬盤打開看。但是在英文info中輸入中文,保存過程中就出現了解碼不了的問題,也就是解碼到中文部分就彈出下面這個錯誤來:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' in position 61: ordinal not in range(128)
其中的61這個位置是彈性的,就是info中加入了中文的那個位置。這個錯誤基本一直都存在,也就是當我想要把修改過后的info寫入文件的時候:
代碼如下:
現在我已經知道為什么錯誤了。問題就在于修改之后的info這個字符串變量。info中的數據是我從系統中通過help函數查到的字串(也就是原始的純英文的info)加上我手動輸入的中文得到的一個綜合的字符串。在我從系統中查詢系統文檔時,我對原始info進行了如下保存:
代碼如下:
所以,結論就是:當你在內存中操作時,你可以隨意的不管編碼方式是什么,系統會自動的按照具體情況進行判斷。但是你如果要用到中文字符,并且還要通過文件的方式去暫時保存數據或者字串的話,請你一定要在第一次寫文件的時候用utf-8的格式寫進去,也就是如下的方式:
代碼如下:
問題找到了,下面進行一些其他的討論。
有的人說,只要使用了# -*- coding:utf-8 -*-不就行了嗎?其實不然。
通過我的測試(我使用IDLE(Python2.5.4 GUI)編譯器。【1】無論我開頭用不用# -*- coding:utf-8 -*-,還是軟件中是不是設置了使用默認的utf-8編碼方式,中文在控件和文件之間的使用都是沒有問題的。【2】info='中文'; 這樣的操作都是可以的。讀的時候使用一般的讀法就可以了。原因我想是因為編譯器升級,解決了中文顯示和使用的問題,早期中文語言不能夠使用的情況現在已經不存在了。
代碼如下:
jap_text=JAP.readline()
chn_text=CHN.readline()
#先decode成UTF-16,再encode成UTF-8
jap_text_utf8=jap_text.decode("SHIFT_JIS").encode("UTF-8")
#不轉成utf-8也可以
chn_text_utf8=chn_text.decode("GB2312").encode("UTF-8")
#編碼方式大小寫都行utf-8也一樣
UTF.write(jap_text_utf8)
UTF.write(chn_text_utf8)
UTF.close()
except IOError,e:
print "open file error",e
def ConvertCN(s):
return s.encode('gb18030')
def PrintFile(filename):
f = file(filename, 'r')
for f_line in f.readlines():
print ConvertCN(f_line)
f.close()
if __name__ == "__main__":
PrintFile('1.txt')
print ConvertCN("\n****** 按任意鍵退出! ******")
print sys.stdin.readline()
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com