python編碼問題的理解與解決

2022-05-21 10:29:04 字數 1590 閱讀 8828

錯誤:'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 sys

reload(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

print

sys.getdefaultencoding() 系統的預設編碼方式認為ascii,

a = '中文'

b = u'中文'

print

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")

print

sys.getdefaultencoding()

a = '中文'

b = u'中文'

print type(a),type(b) #

這裡終端已經是utf-8,a是str,即utf-8,b是unicode,系統預設編碼為utf-8,所以會預設進行utf8編碼,效果與主動編碼一樣

print

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請...