使用工具:Aptana studio 2, pyDev。python
內容:python,tornado框架。CMS(內容管理系統,簡稱後臺)。web
狀況:在Aptana中運行,在保存含有中文的網頁時,即便用nicedit控件,獲取字符串,寫入文件,相關截圖以下:shell
代碼:數據庫
file = open(fullFilePath,'w') file.write(content) file.close() #content爲傳入字符串這時候沒有錯誤,正常保存。
可是,當我部署到windows 32環境中,使用command shell運行時,報錯: UnicodeDecodeError( 命令行中默認使用的是 windows 系統的 gbk 編碼, str 就是使用 gbk 編碼的字符串,使用 utf-8 解碼時部分字節值超出 utf-8 範圍,系統錯誤 ),file.write()沒法完成任務。windows
因而我顯示加編碼:框架
file = open(fullFilePath,'w') file.write(content.encode('utf8')) file.close()這時正常。
不知Aptana幹了什麼事?tornado
相關研究以下:工具
http://www.iteye.com/topic/757508編碼
1, 亂碼,編碼錯誤出現的緣由:字符串 str 聲明時編碼爲 a ,而輸出(控制檯顯示或者寫入文件,數據庫等)時因爲環境的不一樣,默認編碼也不一樣。在不一樣的環境下, python 會根據各自的默認編碼去解碼字符串 a ,所以 出現亂碼( str 對應的 a 編碼的值正好都在 b 編碼的取值範圍內) 或者 編碼錯誤(譬如: a 編碼中有值 10000 ( 2 進制的形式),可是 b 編碼的取值範圍不包括10000 ,就會出現轉換錯誤)spa
2, 若是變量直接聲明爲 Unicode 字符,那麼在不一樣輸出環境時, python 都能正常地轉換爲相應的字符串
3, 經過 u 符號聲明的 Unicode 字符串在上述 3 種狀況下都不出現亂碼, 推薦使用
4, 原始字符串和普通字符串聲明的字符串的默認編碼跟系統環境相關, python 命令行中默認的是操做系統的編碼如 windows 的gbk , pydev 或者 idle 中,字符串的默認編碼跟文件頭部聲明的編碼一致(若是文件頭部沒有聲明,那麼默認的是 ascii 編碼)
感謝原做者desert3