首頁  >  文章  >  後端開發  >  Python的編碼格式更改問題

Python的編碼格式更改問題

anonymity
anonymity原創
2019-04-20 14:27:446577瀏覽

今天寫python爬蟲,突然爬取的網頁異常,並報錯:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 41-50: ordinal not in range(256);UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal,這是一個明顯的編碼格式的問題。其實不只是python2或3,還是其他java,c等程式語言,常常會遇到編碼格式的問題,異常頭痛,尤其是ASCII、gbk、utf-8等編碼之間的轉換。於是查找資料、動手實踐,找到這樣的幾個方法。

首先關於python的系統編碼格式和輸入輸出格式,我們要如何查看呢?

Python的編碼格式更改問題

>>> import sys
>>> sys.getdefaultencoding()# 系统默认编码格式
'UTF-8'
>>> sys.stdout.encoding# 输入输出格式
'US-ASCII'

這種情況下表示,目前的命令列的輸入輸出編碼是ascii,所以需要手動改成設定環境變數LANG為utf-8:

export LANG="en_US.UTF-8"

如果是在ubuntu環境下,可以將上面這行指令加入~/.bashrc中一勞永逸解決問題,加入後執行下方指令使其生效或重新啟動生效。

source ~/.bashrc

或另一種方法是,只針對python設定對應編碼(同上,命令列運行或加入bashrc檔):

PYTHONIOENCODING='utf_8'
export PYTHONIOENCODING

gbk編碼範例圖:

Python的編碼格式更改問題

#ascii編碼表圖部分:

Python的編碼格式更改問題

#在平時程式碼編程時別忘了給上排加上:

# -*- coding: utf-8 -*-

設定python編碼可以使用命令列,但僅在本會話中生效

>>>sys.getdefaultencoding()查看当前编码(若报错,先执行>>>import sys >>>reload(sys));
>>>sys.setdefaultencoding('utf8')设置编码

在程式碼中重新載入SYS模組並設定uft-8也是可行的,但是在pycharm中會提示錯誤

import sys
reload(sys) 
sys.setdefaultencoding('utf8')
重启Python解释器,发现编码已被设置为utf8;
这是因为系统在Python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动加上解决代码,属于一劳永逸的解决方法。

在平常開發時,我們都知道利用Decode和Encode進行轉碼作業。

Decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
Encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

在最新的python 3版本中,字串的型別是str, 在記憶體中都是以Unicode表示,一個字元對應若干個位元組; 

如果要在網路上傳輸,或儲存到磁碟上,就需要把str變成以位元組為單位的bytes。

以Unicode表示的str透過encode()方法可以編碼為指定的bytes,例如:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 0-1: ordinal not in range(128)

在操作字串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應始終堅持使用UTF-8編碼對str和bytes進行轉換。

友誼連結【UTF-8編碼轉換工具

python3影片教學

編碼格式最初只有幾種,由於電腦的普及,許多國家或組織的使用,編碼格式也變得越來越多,但是國際通用的依然是UTF-8,所以應該有個良好的程式設計習慣,多使用UTF-8編碼格式。在遇到編碼問題時,也盡量保持編碼格式的統一。

以上是Python的編碼格式更改問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn