談一談python的字串和輸出

2021-09-19 14:20:28 字數 2195 閱讀 7120

python3的字串預設是unicode格式儲存的,不必在前面加u說明。u'真的'和'真的'是一樣的。

為什麼有時候獲取網頁資訊之後,我們輸出結果到螢幕,檢視一些中間變數的時候,會出現告知我們這樣的錯誤:

unicodedecodeerror: 'utf-8' codec can't decode bytes in position 0-1: unexpected

end of data

unicode解碼錯誤: utf-8 編碼規則不能解碼位置0到1處的位元組:資料結尾不正確(不是期待的)。

這就是因為編碼轉換失敗了。網頁自己是gbk編碼,但是print輸出的時候採用了utf-8編碼,所以會出現無法識別的情況。

unicode字串轉為utf-8可以正確地轉,但是gbk轉為utf-8就不盡然了。這時,需要先將gbk編碼轉換為bytes,先encode,再decode。為什麼要先encode也很容易記憶,就是……str型別只有encode方法可以呼叫。

print會使用系統預設編碼方式,解碼位元組串然後輸出。使用:

import sys

sys.getdefaultencoding()

可以獲得當前系統的print編碼。則,set就可以將print的編碼方式設定為除了utf-8的其他方式。

比如:sys.setdefaultencoding("utf-8")

就可以將編碼設為utf-8,還有乙個地方需要注意,python2.x和3.3、以及3.3後面的版本這裡的處理有點不一樣,在文章最後寫。

sys.setdefaultencoding("gbk")

sys.getdefaultencoding()

下面是將str變為bytes、utf-8和gbk編碼的例子。

>>> su = u'哈哈'

>>> su

'哈哈'

>>> sut= su.encode("utf-8")

#轉換成utf-8編碼

>>> sut

b'\xe5\x93\x88\xe5\x93\x88'

>>> print(sut)

b'\xe5\x93\x88\xe5\x93\x88'

>>> print(su.decode('gbk'))

traceback (most recent call last):

file "", line 1, in attributeerror: 'str' object has no attribute 'decode'

#str型別只有encode方法可以呼叫

>>> tk= b'\xe5\x93\x88'

>>> tk

b'\xe5\x93\x88'

>>> print(tk.decode('utf-8'))

哈》 import sys

>>> sys.getdefaultencoding()

'utf-8'

>>> sut += b'\0x5'

>>> sut

b'\xe5\x93\x88\xe5\x93\x88\x00x5'

>>> print(sut)

b'\xe5\x93\x88\xe5\x93\x88\x00x5'

>>>

>>> print(sut.decode('utf-8'))

哈哈 x5

如果使用python 2.x,直接reload()就可以了。

如果使用python3.0到3.3,需要

import imp

imp.reload(sys)

sys.setdefaultencoding("gbk")

如果使用python3.3以上版本,需要

import importlib

importlib.reload(sys)

#然後使用dir(sys)可以發現,sys已經沒有了setdefaultencoding()方法,那怎麼辦?如果面對乙個gbk檔案,只好將檔案以byte方式讀取進來,再decode("gbk"),再輸出。

with open("newgbk.txt", "rb") as file1:

for i in file1.readlines():

#print(i)

print(i.decode('iso-8859-6'))

python 之類變數和例項變數(簡單談一談)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 coding utf 8 cr...

談一談css中的100 和auto

在web前端的程式設計過程中,利用 數值和auto來進行設定元素的寬度和高度等是很常見的,但是他們的值是怎樣計算的呢?一 100 百分比設定畫素是很常見的,也比較簡單。一般在兩個地方用的比較多 設定子元素寬高和設定 內 外 邊距。1.首先看設定寬高,先看例子 html class content d...

python字串和字元

python沒有字元資料型別,只有字串。字串必須在 單引號 雙引號 裡面 hello world hello world 為了和其他語言保持一致通常把 用於括住單個字元,用於括住字串 三引號 三引號中可以包含換行符 2.ascii碼和統一碼 ascll碼屬於統一碼 ascii碼 二進位制0000 0...