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