理清 python 編碼相關問題

來源:互聯網
上載者:User

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

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成自己想要的格式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.