錯誤:'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
看到網上很多都不清楚,做了一天的實驗,終於搞清楚這些原理
如果有錯誤請指出,謝謝,希望不要一開口就噴。
總結:理解3個概念,**編碼型別,即python的源**的編碼格式,有中文必須#coding:utf-8,這句話是說pytho以utf-8去解析**
系統編碼型別,指的是控制台的輸出平台的編碼型別
系統預設編碼型別,指的是在需要轉換時的預設轉換,一開始把這個與第一點混淆了。
舉例:1.
python預設的**編碼型別為ascii
**中字串的預設編碼與**檔案本身的編碼一致
s='中文' 這裡的s為ascii型別
#coding:utf-8
必須得有這句才能識別出中文。無論是str還是unicode都得出現這句。
str預設是utf-8編碼型別
s='中文' 這裡的s為utf8型別
2如果字串是這樣定義:s=u'中文'
則該字串的編碼就被指定為unicode了,即python的內部編碼,而與**檔案本身的編碼無關。因此,對於這種情況做編碼轉換,只需要直接使用encode方法將其轉換成指定編碼即可
3
import sysreload(sys)
sys.setdefaultencoding('utf-8')
設定系統預設編碼方式為utf-8
即沒有說明的需要轉換的會使用utf-8進行轉換。
4 linux系統編碼是utf-8,即控制台是utf-8
print 出來的東西必須和控制台的編碼格式相容。
5檔案的讀入
str的型別為讀入的檔案的型別
#coding:utf-8 宣告出現的中文為utf-8。
import
sys
sys.getdefaultencoding() 系統的預設編碼方式認為ascii,
a = '中文'
b = u'中文'
repr(a),repr(b)
print a, b.encode('
utf-8
') #
這裡的終端是utf-8,a是str,即為utf-8,b是unicode,預設編碼為所以必須轉成utf-8
reload(sys)
sys.setdefaultencoding(
"utf-8")
sys.getdefaultencoding()
a = '中文'
b = u'中文'
print type(a),type(b) #
這裡終端已經是utf-8,a是str,即utf-8,b是unicode,系統預設編碼為utf-8,所以會預設進行utf8編碼,效果與主動編碼一樣
repr(a),repr(b)
print a, b
python編碼的理解
from 結合二位的答覆,執行結果如下 a 中國 b unicode a,cp936 b u u4e2du56fd c b.encode utf 8 c xe4xb8xadxe5x9bxbd d b.encode cp936 d xd6xd0xb9xfa 加上unihan的資料庫,得知b包含的實際上...
學習Python時遇到的編碼顯示問題及解決方法
1.編碼問題 剛開始學習時,沒有出現因為編碼而造成執行出錯等情況,但最近程式設計過程中,因為編碼問題多次出錯,比如程式設計過程中,注釋中含中文執行就出現錯誤,最後在一篇部落格中看到,在開始程式設計時第一行寫入編碼格式,可以減少不必要的編碼出錯問題。防止中文亂碼等,第一行新增 2.用read csv等...
字元編碼問題理解
2015年8月5日 09 52 31 字元編碼問題理解 1.檔案儲存有編碼格式,檔案中的字元以這種格式儲存在其中 2.程式預設接收那種編碼格式的字元是別外一回事,與檔案格式無關,如普通的中文版本windwos系統的控制台與普通程式中,預設的窄字元的編碼格式是gbk的 而linux的控制台與http請...