国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python學(xué)習(xí)筆記 --- setdefaultencoding() : reload(sys)后

Object / 3598人閱讀

摘要:記住如中文如果是在的文件中,該字符串就是編碼,如果是在的文件中,則其編碼為。如果字符串是這樣定義中文則該字符串的編碼就被指定為了,即的內(nèi)部編碼,而與代碼文件本身的編碼無關(guān)。

寫在前面

一個(gè)很難找到問題所在的問題,后來是通過網(wǎng)上的博文才知道了是怎么樣的原因,reload(sys)不能隨便用,因?yàn)橐坏┲刂昧耍芏喹h(huán)境變量就不一樣了。

正文 搞搞編碼

首先是問題的來源:

我在寫python腳本遇到了下面這個(gè)問題

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

相當(dāng)不能理解,這其實(shí)就涉及了python里面相當(dāng)復(fù)雜的編碼的問題。在python中運(yùn)行的字符串都是unicode編碼的,為什么需要這么一個(gè)中間的編碼,其實(shí)是很有用的,保證了編碼與編碼之間的互通性。

首先,大家肯定知道encode和decode,用法如下

str = "dafd"
unicode_str = str.decode("gb2312") #這表示將gb2312編碼的str轉(zhuǎn)化成unicode
unicode_str.encode("utf-8") #這表示將unicode編碼的unicode_str轉(zhuǎn)化成utf-8編碼

因此,轉(zhuǎn)碼的時(shí)候一定要先搞明白,字符串str是什么編碼,然后decode成unicode,然后再encode成其他編碼

另外,
代碼中字符串的默認(rèn)編碼與代碼文件本身的編碼一致。記住!~

如:s="中文"

如果是在utf8的文件中,該字符串就是utf8編碼,如果是在gb2312的文件中,
則其編碼為gb2312。這種情況下,要進(jìn)行編碼轉(zhuǎn)換,
都需要先用decode方法將其轉(zhuǎn)換成unicode編碼,
再使用encode方法將其轉(zhuǎn)換成其他編碼。通常,在沒有指定特定的編碼方式時(shí),都是使用的系統(tǒng)默認(rèn)編碼創(chuàng)建的代碼文件。 

如果字符串是這樣定義:s=u"中文"

則該字符串的編碼就被指定為unicode了,即python的內(nèi)部編碼,
而與代碼文件本身的編碼無關(guān)。因此,對(duì)于這種情況做編碼轉(zhuǎn)換,只需要直接使用encode方法將其轉(zhuǎn)換成指定編碼即可。

如果一個(gè)str已經(jīng)是unicode了,這時(shí)候再去decode就會(huì)出錯(cuò),很好理解。

獲得系統(tǒng)的默認(rèn)編碼

#!/usr/bin/env python
#coding=utf-8
import sys
print sys.getdefaultencoding()  

該段程序在英文WindowsXP上輸出為:ascii 
但其實(shí)在ubuntu里也是這樣的問題,這其實(shí)就是我寫這篇文章的初衷,因?yàn)槲冶贿@個(gè)問題困擾了很久!

s = "你好"
print s

輸出控制臺(tái)的編碼是ascii時(shí),如果你print的是unicode就會(huì)出現(xiàn)這個(gè)錯(cuò)誤:

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

只要改成 print s.encode("utf-8")就ok了。

為什么要reload(sys)

剛剛這么講好像就解決了?其實(shí)不是的,我有個(gè)函數(shù)tf.train.BytesList,這個(gè)函數(shù)的參數(shù)是一個(gè)str,但是這個(gè)str的編碼因?yàn)橄到y(tǒng)默認(rèn)編碼的原因出錯(cuò)了,就是上面的錯(cuò)。這時(shí)候的解決辦法一般是reload(sys)。

但是,你會(huì)看到卡住了?其實(shí)是輸出看不到了,網(wǎng)上有這樣的解答。

IDLE作為一個(gè)GUI Shell環(huán)境,在啟動(dòng)初始化過程中,
會(huì)設(shè)置特定的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出,使得輸入和輸出都在IDLE的GUI Shell中。
而如果手動(dòng)執(zhí)行了reload(sys)以后,sys模塊的這三個(gè)變量將會(huì)被重置,
導(dǎo)致輸出無法顯示在IDLE。所以解決方案很簡(jiǎn)單,只需要在reload之前把這三個(gè)變量都復(fù)制一份,reload之后再恢復(fù)回來就行了

上面的IDLE其實(shí)不只是IDLE,像我就是在jupyter的情況下出錯(cuò)的,terminal下也是一樣。所以要記得補(bǔ)上以下代碼:

stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr
reload(sys)
sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde

ok!就寫到這,祝大家coding愉快~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/40826.html

相關(guān)文章

  • #0000在一個(gè)圖片上畫一個(gè)數(shù)字

    摘要:從庫導(dǎo)入所需模塊,已經(jīng)是平臺(tái)事實(shí)上的圖像處理標(biāo)準(zhǔn)庫了。功能非常強(qiáng)大,但應(yīng)用程序界面卻非常簡(jiǎn)單易用。能訪問解釋器聯(lián)系緊密的變量和函數(shù)。 #0000 from PIL import Image,ImageFont,ImageDraw#從PIL庫導(dǎo)入所需模塊 #######PIL:Python Imaging Library,已經(jīng)是Python平臺(tái)事實(shí)上的圖像處理標(biāo)準(zhǔn)庫了。PIL功能非常強(qiáng)大...

    BearyChat 評(píng)論0 收藏0
  • Python中一個(gè)編碼的錯(cuò)誤

    摘要:我在中使用的時(shí)候,提示一直不知道是什么原因,通過查閱一個(gè)資料,才知道,原來是編碼問題。字符串在進(jìn)行的時(shí)候,要使用什么編碼格式進(jìn)行轉(zhuǎn)換呢這個(gè)時(shí)候就要根據(jù)來確定了。而是編碼,在字符表中不存在這種大于的字符存在。所以當(dāng)然會(huì)報(bào)錯(cuò)。 我在Linux中使用make html的時(shí)候,提示: UnicodeDecodeError: ascii codec cant decode byte 0xe5 i...

    Alfred 評(píng)論0 收藏0
  • python】[轉(zhuǎn)載]UnicodeEncodeError: 'ascii'

    摘要:原因在安裝時(shí),默認(rèn)的編碼是,當(dāng)程序中出現(xiàn)非編碼時(shí),的處理常常會(huì)報(bào)這樣的錯(cuò),不過在就不會(huì)有這樣的問題。 1、原因 python2.7在安裝時(shí),默認(rèn)的編碼是ascii,當(dāng)程序中出現(xiàn)非ascii編碼時(shí),python的處理常常會(huì)報(bào)這樣的錯(cuò),不過在python3就不會(huì)有這樣的問題。 2、解決辦法 臨時(shí)解決方法: 代碼中加入如下三行import sys reload(sys) sys.setd...

    Airy 評(píng)論0 收藏0
  • pythonsys,os,time模塊的使用(包括時(shí)間格式的各種轉(zhuǎn)換)

    摘要:模塊實(shí)現(xiàn)從程序外部向程序傳遞參數(shù)。位置參數(shù)代表文件本身,運(yùn)行方法參數(shù),參數(shù)。。是正常退出,其他為異常第次第五次退出模塊判斷現(xiàn)在正在實(shí)用的平臺(tái),返回返回得到當(dāng)前工作的目錄。指定所有目錄下所有的文件和目錄名。例檢驗(yàn)指定的對(duì)象是否存在。 sys模塊 sys.argv: 實(shí)現(xiàn)從程序外部向程序傳遞參數(shù)。 位置參數(shù)argv[0]代表py文件本身,運(yùn)行方法 python xx.py 參數(shù)1,參數(shù)2 ...

    mochixuan 評(píng)論0 收藏0
  • Scrapy爬取hupu論壇標(biāo)題統(tǒng)計(jì)數(shù)量并生成wordcloud

    摘要:爬取數(shù)據(jù)提取標(biāo)題最終爬取了頁多個(gè)標(biāo)題分詞并統(tǒng)計(jì)詞的數(shù)量這里我使用了這個(gè)庫來分詞分出了個(gè)詞然后統(tǒng)計(jì)數(shù)量這里我統(tǒng)計(jì)了兩個(gè)詞以下和兩個(gè)詞以上的詞的量分配如圖生成詞云以及其他數(shù)據(jù)圖表這里我是用的庫生 爬取數(shù)據(jù) huputitle_spiders.py #coding:utf-8 import scrapy from huputitle.items import Huputitle...

    renweihub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Object

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<