Python——系統(tǒng)編碼問題

python在安裝時(shí),默認(rèn)的編碼是ascii。經(jīng)常出現(xiàn)它無法處理非ascii編碼的情況。此時(shí)需要手動(dòng)修改它的編碼字符集。

我們可以使用IDLE查詢系統(tǒng)默認(rèn)編碼:


>>>import sys

>>>sys.getdefaultencoding()

修改默認(rèn)編碼,可以使用sys的setdefaultencoding方法


>>>import sys

>>>sys.getdefaultencoding()

>>>reload(sys)

>>>sys.setdefaultencoding('utf8)

記得要加載了sys模塊才能進(jìn)行set操作,否則會(huì)報(bào)錯(cuò),就像上面那樣。還有一個(gè)問題就是,關(guān)閉IDLE和CMD的時(shí)候,默認(rèn)編碼又變回ASCII。如果想把系統(tǒng)默認(rèn)編碼永久設(shè)置為utf-8,需要在Python安裝目錄的Lib\site-packages文件夾下創(chuàng)建一個(gè)sitecustomize.py,內(nèi)容設(shè)置為:

#encoding = utf8

import sys

reload(sys)

sys.setdedaultencoding('utf8')

所以,我建議一般寫程序時(shí)候在源程序頭上加上上面的代碼,就能解決默認(rèn)編碼問題。不然會(huì)出現(xiàn)下面的錯(cuò)誤,這是我寫爬蟲的時(shí)候報(bào)的錯(cuò)誤,當(dāng)加上上面的代碼就解決了。format內(nèi)的u[0],u[1],u[2]是使用beautifulsoup庫(kù)獲取的內(nèi)容,而beautifulsoup會(huì)自動(dòng)把html文件解析成utf-8編碼格式,而系統(tǒng)默認(rèn)編碼是ASCII,所以會(huì)報(bào)錯(cuò),當(dāng)修改系統(tǒng)編碼為utf-8時(shí),就解決了該問題。





下面附上我爬取中國(guó)大學(xué)排名網(wǎng)站的定向爬取代碼:

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

importrequests

frombs4importBeautifulSoup

importbs4

importre

importsys

reload(sys)

sys.setdefaultencoding('utf8')

defgetHTMLText(url):

try:

r = requests.get(url,timeout=30)

r.raise_for_status()

r.encoding = r.apparent_encoding

returnr.text

except:

return""

deffillUnivList(ulist,html):

soup = BeautifulSoup(html,"html.parser")

fortrinsoup.find('tbody').children:

ifisinstance(tr,bs4.element.Tag):

tds = tr.find_all('td')

(.*?)

ulist.append([str_rank,tds[1].string,tds[3].string])

defprintUnivList(ulist,num):

print("{:^10}\t{:^6}\t{:^10}".format("排名","學(xué)校名稱","總分"))

foriinrange(num):

u = ulist[i]

print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

print("Suc"+str(num))

defmain():

uinfo = []

url ="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html"

html = getHTMLText(url)

fillUnivList(uinfo,html)

printUnivList(uinfo,20)#20 univs

if__name__ =='__main__':

main()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 字符集和編碼簡(jiǎn)介 在編程中常??梢砸姷礁鞣N字符集和編碼,包括ASCII,MBCS,Unicode等字符集。確切的說...
    蘭山小亭閱讀 9,100評(píng)論 0 13
  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號(hào) 簡(jiǎn)介有稍微接觸python的人就會(huì)知道,python中...
    ayuLiao閱讀 3,400評(píng)論 1 5
  • 幾個(gè)基本概念 bit二進(jìn)制位, 是計(jì)算機(jī)內(nèi)部數(shù)據(jù)儲(chǔ)存的最小單位,11010100是一個(gè)8位二進(jìn)制數(shù)。一個(gè)二進(jìn)制位只...
    西電大俠閱讀 3,718評(píng)論 1 8
  • 編碼問題一直困擾著開發(fā)人員,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,584評(píng)論 1 20
  • 01 有一天,我在朋友圈發(fā)了一張美喵的照片,朋友西西小姐說:“它是只小母貓吧?”我說,對(duì)啊,是因?yàn)樗L(zhǎng)得漂亮你就猜...
    朵朵寶貝兒閱讀 233評(píng)論 0 0

友情鏈接更多精彩內(nèi)容