python3 0中各種編碼問題

2021-08-21 11:08:35 字數 1850 閱讀 3083

目前python2.0還在使用,但可以看出python3.0才是未來的主流。因此本文主要研究的是python3中的各編碼問題。

unicodeencodeerror錯誤:字元編碼錯誤

在python2中,系統預設的編碼方式是:ascii碼。字母、標點和其他字元只使用乙個位元組來表示,但對於中文字元來說,乙個位元組滿足不了需求,因此碰到中文的時候就會亂碼。

>>> import sys

>>> sys.getdefaultencoding()

'ascii'

>>>

在python3中,對中文進行了全面的支援(python3 把系統預設編碼設定為 utf-8)。

>>> import sys

>>> sys.getdefaultencoding()

'utf-8'

>>>

所以在編寫源**檔案

***.py

時需要注意:

python3中文字字元和二進位制資料區分得更清晰,分別用 str 和 bytes 表示。文字字元全部用 str 型別表示,str 能表示 unicode 字符集中所有字元,而二進位制位元組資料用一種全新的資料型別,用 bytes 來表示。

python3 中,在字元引號前加『b』,明確表示這是乙個 bytes 型別的物件,實際上它就是一組二進位制位元組序列組成的資料,bytes 型別可以是 ascii範圍內的字元和其它十六進製制形式的字元資料,但不能用中文等非ascii字元表示。

>>> a = b'\xe7\xa6\x85'

>>> a

b'\xe7\xa6\x85'

>>> type(a)

>>> c = b'張博軒'

file "", line 1

syntaxerror: bytes can only contain ascii literal characters.

>>>

python2

python3

表現轉換

作用str

bytes

位元組encode

儲存unicode

str字元

decode

顯示str 與 bytes 之間的轉換可以用 encode 和從decode 方法。

encode 負責字元到位元組的編碼轉換。預設使用 utf-8 編碼轉換。

decode 負責位元組到字元的解碼轉換,通常使用 utf-8 編碼格式進行轉換。

如果乙個字串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷:

isinstance(s, unicode)  #用來判斷是否為unicode

用非unicode編碼形式的str來encode會報錯 

chardet是python的乙個第三方庫,常用於編碼識別。

import chardet

with open('text.txt', 'rb') as f:

data = f.readline()

tmp = chardet.detect(data)

print(tmp)

""""""

utf-8是對unicode字符集進行編碼的一種編碼方式

可以在decode()中加入引數。如:

decode('gb2312', 'ignore')

意思上忽略非gb2312編碼的字元,這樣就不會報錯了。其他類似的引數如下:

Python3 0的新改動

這篇文章主要介紹了相比於python2.6,python3.0的新特性。更詳細的介紹請參見 python3.0的文件。common stumbling blocks 本段簡單的列出容易使人出錯的變動 初學者應該注意 old print the answer is 2 2 new print the ...

python 3 0 在for中使用insert

首先在python 3.0手冊中有這麼個示例 a cat window defenestrate for x in a make a slice copy of the entire list if len x 6 a.insert 0,x a defenestrate cat window def...

Python 3 0最簡單的爬蟲

做個小專案練練手,比較有動力繼續下去,這邊參考最簡單的爬蟲程式自己抄了一下。但是因為3.0的關係,無法直接使用,根據2.0版本的 進行修改後成功了。如下 coding utf 8 import urllib.request import re 該函式用於獲取html內容 使用到urlopen的函式 ...