python的編碼與解碼

2022-09-20 03:00:10 字數 2678 閱讀 2374

#########################

# python中的字元型別 #

#########################

# python中的字元型別分兩種:

# 1. str型別:ascii表中的字元,佔乙個位元組,所以也叫位元組字元。字面量用雙引號表示。

s = 'ok, '

u = u'我, '

u1 = u'我'

u2 = u'愛python'

print 's:', s

print 'u1:', u1

print 'u2:', u2

# 解析器通常把unicode字元轉換成unicode轉義序列

# 轉義序列以"\u"開頭

print 'repr(s): ', repr(s)

print 'repr(u1): ', repr(u1)

print 'repr(u2): ', repr(u2)

# 這種轉義序列只在unicode字面量中有效

print "'\u6211': ", '\u6211'

print "u'\u6211': ", u'\u6211'

print ''

# 也可以用str()函式建立str字串,用unicode()函式建立unicode字串

print 'type of str(s): ', type(str(s))

print 'type of unicode(s): ', type(unicode(s))

# 可以給unicode()函式傳入乙個unicode字串

print 'type of unicode(u): ', type(unicode(u))

# 但是如果我們給unicode()函式傳入'我',又會怎樣呢?

try:

print "unicode('我'):", unicode('我')

except unicodedecodeerror as e:

# 錯誤資訊

# 解析器試圖用ascii編碼來解碼我們傳入的引數,原因會在下面將到

print e

#########################

# 編碼和解碼 #

#########################

# 編碼的過程其實就是採用一定的編碼格式將unicode字元轉換成str字元的過程

# 非ascii碼字元按位元組為單位被編碼成十六進製制轉義字元

# 解碼採用的編碼格式跟設定和環境有關

utf8_s = s.encode('utf-8')

utf8_u = u.encode('utf-8')

utf8_u1 = u1.encode('utf-8')

utf8_u2 = u2.encode('utf-8')

print 'utf8_s: ', s

print 'repr utf8_u: ', repr(s)

print 'utf8_u: ', u

print 'repr utf8_u: ', repr(utf8_u)

print 'utf8_u1: ', utf8_u1

print 'repr utf8_u1: ', repr(utf8_u1)

print 'utf8_u2:', utf8_u2

print 'repr utf8_u2: ', repr(utf8_u2)

# 如果我們的str字面量中有非ascii碼字元,解析器會自動對其進行編碼

print "'我愛python': ", '我愛python'

print "repr '我愛python': ", repr('我愛python')

# 來看看上面碰到的問題,我們將帶『我』(str型別)傳給unicode函式,結果報錯了

try:

print "unicode('我'):", unicode('我')

except unicodedecodeerror as e:

# 發生錯誤了,解析器試圖用ascii編碼來解碼我們傳入的引數

print e

# 原因就是解析器會先將引數用預設的編碼格式(這裡是utf-8)進行編碼,然後傳給unicode()函式,

# unicode函式的幫助資訊,其中有段是這麼說的:

'''unicode(string[, encoding[, errors]]) -> unicode object

| | create a new unicode object from the given encoded string.

| encoding defaults to the current default string encoding.

'''# unicode類總會用第二個引數指定的編碼格式來解碼第乙個引數,如果第二個引數為空,就採用預設的格式。

# 指令碼開頭指定了utf-8編碼格式,因此這裡傳入的『我』被自動採用utf-8進行編碼。

# 可是這裡unicode並沒有採用我們開頭指定的utf-8格式來解碼,而是ascii碼,那當然會報錯。

# 為什麼會採用ascii碼,我估計原因是這樣的,python 2.7.x在解析器內都是預設採用ascii作為預設編碼格式的,

# 而我們在檔案開頭指定的utf-8格式只對本檔案中的字串字面量有效,而unicode類是定義在其他的模組檔案裡。

Python 編碼與解碼

字串型別是對人類友好的符號,但計算機只認識一種符號,那就是二進位制 binary 數,或者說是數字。為了用計算機可以理解的數字描述人類使用的字元,我們需要一張數字與字元對應的表。我們都知道在計算機中 1 byte 8bits,可以儲存 0 255共256個值,也就是說 1byte最多可以表示 256...

python的編碼與解碼

1.特殊情況 xe5 xae x9d xe9 x python2控制台bai輸出會有這種情況,包括以下list裡面的漢字雖du然是utf8格式的但仍然zhi不可見中文。只需要包要檢視的list轉為str並decode string escape 例子為 li 33,39 寶馬 36,39 馬 pri...

編碼與解碼 python 經驗

位元 bit 也稱二進位制位,指二進位制中的一位,是計算機資訊的最小單位。bit是binary digit 二進位制數字 的縮寫,還可被縮寫為b。位元組 港澳台稱位元組,byte 乙個位元組代表8個位元,也被縮寫為b,在工業標準 網路 電信技術中也被成為八位組 octet 字面量,可以理解為給人看的...