UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

在使用selenium處理中文網頁或者網頁標題是中文的時候,出現UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128),web

1 from selenium import webdriver
2 import sys
3 
4 print sys.getdefaultencoding()
5 
6 driver = webdriver.PhantomJS()
7 driver.get("http://www.douban.com")
8 
9 print driver.title

字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。

decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。

encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。

所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼

代碼中字符串的默認編碼與代碼文件自己的編碼一致。

douban網站的標題編碼是gb2312,
因此使用decode就能夠解決這個問題網站

print driver.title.encode("gb2312")編碼

 爲何會報錯「UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)」?本文就來研究一下這個問題。
字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。

decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。

encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。

所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼

代碼中字符串的默認編碼與代碼文件自己的編碼一致。

如:s='中文'

若是是在utf8的文件中,該字符串就是utf8編碼,若是是在gb2312的文件中,則其編碼爲gb2312。這種狀況下,要進行編碼轉換,都須要先用decode方法將其轉換成unicode編碼,再使用encode方法將其轉換成其餘編碼。一般,在沒有指定特定的編碼方式時,都是使用的系統默認編碼建立的代碼文件。spa

相關文章
相關標籤/搜索