python tornado框架中的中文編碼問題

使用工具: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

相關文章
相關標籤/搜索