成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Object / 3674人閱讀

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

寫在前面

一個很難找到問題所在的問題,后來是通過網(wǎng)上的博文才知道了是怎么樣的原因,reload(sys)不能隨便用,因為一旦重置了,很多環(huán)境變量就不一樣了。

正文 搞搞編碼

首先是問題的來源:

我在寫python腳本遇到了下面這個問題

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

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

首先,大家肯定知道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)碼的時候一定要先搞明白,字符串str是什么編碼,然后decode成unicode,然后再encode成其他編碼

另外,
代碼中字符串的默認編碼與代碼文件本身的編碼一致。記??!~

如:s="中文"

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

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

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

如果一個str已經(jīng)是unicode了,這時候再去decode就會出錯,很好理解。

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

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

該段程序在英文WindowsXP上輸出為:ascii 
但其實在ubuntu里也是這樣的問題,這其實就是我寫這篇文章的初衷,因為我被這個問題困擾了很久!

s = "你好"
print s

輸出控制臺的編碼是ascii時,如果你print的是unicode就會出現(xiàn)這個錯誤:

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ù)tf.train.BytesList,這個函數(shù)的參數(shù)是一個str,但是這個str的編碼因為系統(tǒng)默認編碼的原因出錯了,就是上面的錯。這時候的解決辦法一般是reload(sys)。

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

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

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

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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

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

    BearyChat 評論0 收藏0
  • Python中一個編碼的錯誤

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

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

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

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

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

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

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

    renweihub 評論0 收藏0

發(fā)表評論

0條評論

Object

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<