為了避免亂碼問題,應當始終堅持使用
utf-8
編碼對str
和bytes
進行轉換。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注釋是為了告訴
linux/os x
系統,這是乙個
python
可執行程式,
windows
系統會忽略這個注釋;
第二行注釋是為了告訴
python
直譯器,按照
utf-8
編碼讀取源**,否則,你在源**中寫的中文輸出可能會有亂碼。
python
的字串型別是str
,在記憶體中以
unicode
表示,乙個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str
變為以位元組為單位的bytes
。
python
對bytes
型別的資料用帶b
字首的單引號或雙引號表示.
bytes
的每個字元都只占用乙個位元組
>>> 'abc'.encode('ascii')
b'abc'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是
bytes
。要把bytes
變為str
,就需要用
decode()
方法:
>>> b'abc'.decode('ascii')
'abc'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
如果
bytes
中只有一小部分無效的位元組,可以傳入
errors='ignore'
忽略錯誤的位元組:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
python編碼筆記
一段程式讀入了utf 8檔案,再print出來,在pycharm中可以正常執行,在cmd中報 gbk codec can t encode錯誤,是因為cmd預設使用gbk輸出,如果在程式中print了一段utf 8字元則會報此錯誤,解決方法是 file open filepath,encoding ...
Python學習筆記 編碼問題
想要徹底搞清楚編碼問題,我們必須要先搞清楚計算機是怎麼儲存資料的,這就涉及到了計算機基礎的幾個概念了,開篇我們就先來捋捋這幾個容易混淆的概念。bit二進位制位,是計算機內部資料儲存的最小單位,11010100是乙個8位二進位制數。乙個 二進位制位只可以表示0和1兩種狀態 2 1 兩個二進位制位可以表...
python爬蟲筆記 編碼問題
importurllib2 importurllib importrequests frombs4 importbeautifulsoup url respones requests.get url text soup beautifulsoup respones,html.parser info ...