理清 python 編碼相關問題


這兩天在糾結一份代碼, 徹底解決后把之前遇到的相關問題整理一份出來,一來自己理清思路,一來在網上有什么錯誤也會被提前發現。

1.  源代碼級別

REF: PEP 0263 -- Defining Python Source Code Encodings
 Python will default to ASCII as standard encoding if no other
    encoding hints are given.

    To define a source code encoding, a magic comment must
    be placed into the source files either as first or second
    line in the file

         源代碼級別是指在.py文件中,采用了何種類型的編碼作為源代碼。

    默認與操作系統一樣,都是采用了最簡單的ASCII編碼。當使用了中文注釋后,就會提示如下問題

SyntaxError: Non-ASCII character '\xe5' in file test.py on line 5, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

    這時,就需要設置文件的編碼語言,最好看的寫法是:

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

     我覺得看到這行代碼的時候,會有些看向美女的感覺。

     咱們碼農還是這樣吧。。 #coding: utf-8

     這樣,在源代碼級別使用中文就沒有問題了。我們可以輕松通過解釋器這一關

 

2.  代碼保存級別

      在linux下呆久了,會有個缺點,很少關注無關的東西,寫個代碼utf-8就完事了。

      用ultra的時候突然發現原來UTF-8 還有炸彈的,很可能天上掉下個大炸彈,代碼就失效了:)

    引用一段很不錯的介紹:http://www.cnblogs.com/DDark/archive/2011/11/28/2266085.html 關於bom對文件影響

     總體來說就是windows下,bom會在最開端插入標明自身的簽名。

     因此如果想在linux下使用這份腳本,保存為通用的utf-8 無炸彈吧!

 

3.  代碼執行級別

        info = "啟動中..."  或 info = u"啟動中..."

       這里只要牢記--在編譯時會把 字符串 轉換成 unicode對象 就可以了

        即已經不再是按照源代碼的格式來保存字符串了。

       而不包含u的,則是按照原始格式存儲。而這里的原始格式,恰好就是之前第一部分說到的源代碼級別編碼格式。

 

       再后續執行時,就涉及到了運行環境的編碼,

       可以使用 sys.getdefaultencoding() 查看當前運行環境的編碼

       使用reload(sys)
     sys.setdefaultencoding('utf-8') 重新設定運行環境編碼

       而處理編碼文本就是一個套路了,先根據源格式decode,再encode成自己想要的格式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM