小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python 編碼總結(jié)

 dinghj 2014-04-29

一. 基本知識(shí)

1. 如果py文件里面不指定源文件需要用到的編碼格式的話,python解析器就會(huì)用默認(rèn)的編碼去解析,一般是ASCII, 所以如果此時(shí)源文件有中文的話就會(huì)報(bào)錯(cuò),‘SyntaxError: Non-ASCII character......’, 因此一定要顯示指定編碼格式,方法是在py文件第二行加入此句:' #-*- coding: gbk -*-'  , 就指定編碼格式為gbk了。當(dāng)然寫法上還可以是滿足這樣的正則表達(dá)式的句子: 'coding[:=]\s*([-\w.]+)'

注意: 一般聲明的coding要和文件編碼一致,這樣最穩(wěn)妥!

 

2.  python中 s = ‘中文' 和 s = u'中文'的區(qū)別:

s = '中文' 要變成python解析器識(shí)別的unicode,那就要在運(yùn)行時(shí)才能。因?yàn)榻馕銎鲿?huì)在運(yùn)行時(shí)把s變量decode成unicode。

而s = u'中文'則是在編譯的時(shí)候就變成unicode了,并且會(huì)保存在對(duì)應(yīng)的pyc文件中。

所以兩者的區(qū)別其實(shí)就是什么時(shí)候變成unicode,而且作為參數(shù)傳遞時(shí)有u的直接就是unicode對(duì)象了,而沒有u的只是python中的普通的str, 需要變成unicode來用時(shí)需要調(diào)用decode或者unicode函數(shù)來處理。兩者的聯(lián)系就是他們的最終結(jié)果都是unicode。

 

3. 文件的編碼

3.1 在編碼問題中,其實(shí)文件本身的編碼也是很重要的。如何查看?用vim的話,可以通過在vimrc文件加入'set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1' 來檢測(cè)文件的編碼格式,會(huì)按照你列的編碼順序來檢測(cè)該文件的編碼。具體做法是加入那句以后,用vim打開該文件后,用set fileencoding來查看。

 

3.2 文件的編碼其實(shí)就決定了你在文件中寫一句 s = '中文'的時(shí)候,這個(gè)s的值是什么編碼。也就是說,如果文件編碼是gbk,那么s就是gbk編碼,你要變成unicode來用就要s.decode('gbk').

 

4. python文件中的中文有人是建議都用u'xx'的寫法變成unicode,然后在需要轉(zhuǎn)換顯示的時(shí)候才轉(zhuǎn),我表示同意。

二. python解析源文件的流程


流程圖 reference  : http://www./dev/peps/pep-0263/

三. 遇到的問題

遇到的問題的例子比較多,這里不一一列舉了,找了幾個(gè)比較好的參考資料

1.  http://zzjjzzgggg./blog/311666

2. http://zzjjzzgggg./blog/309409

3. http://www./topic/560229

4. http://www./topic/699510

5. 用simplejson 來轉(zhuǎn)換數(shù)據(jù):

simplejson提供兩類API:

1) loads: 將python的object轉(zhuǎn)化成字符串(<type: 'str'>)

2) dumps : 將字符串轉(zhuǎn)化成python的object.

loads明顯是有個(gè)encode的過程, 那么肯定有個(gè)encoding來指定encode時(shí)候的編碼, 不指定默認(rèn)是用utf-8的;

同樣dumps明顯就有個(gè)decode過程, 同樣有個(gè)encoding來指定, 默認(rèn)也是為utf-8;

以前遇到一個(gè)問題是, 通過http接口獲取過來的json數(shù)據(jù)編碼是gbk的, 但是我在loads的時(shí)候沒有指定encoding,

結(jié)果出現(xiàn)亂碼, 找了很久才發(fā)現(xiàn)了問題, 所以我警惕之后調(diào)用這2個(gè)接口的時(shí)候都最好顯示指定encoding,這樣

雖然麻煩了, 但是對(duì)于查找問題和代碼可讀性方面都是有好處的!

 

 

 

 

 

 

 

經(jīng)驗(yàn)是如果遇到編碼問題,可以從一下幾個(gè)方面去思考:

1)文件本身的 編碼

2)聲明的編碼

3)如果數(shù)據(jù)是從網(wǎng)絡(luò)獲取的或者其他途徑,反正就不是自己的,那么建議代碼中加入try...except  UnicodeEncodeError, UnicodeDecodeError 之類的代碼做好防范。

4)建議采用utf-8編碼,如果實(shí)在是對(duì)數(shù)據(jù)量有要求的可以用gbk,因?yàn)樾∫稽c(diǎn)。

 

 

歡迎拍磚!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多