Python是一種面向對象的解釋型計算機程序設計語言,由荷蘭人發明,第一個公開發行版發行于1991年。Python是純粹的自由軟件,源代碼和解釋器CPython遵循 GPL協議。Python語法簡潔清晰,特色之一是強制用空白符作為語句縮進。
Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然后對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調用的擴展類庫。需要注意的是在您使用擴展類庫時可能需要考慮平臺問題,某些可能不提供跨平臺的實現。
Python ascii 編碼轉化為utf-8編碼
實現代碼如下:
123456a = ‘abce’
# print type(a)
b = a.decode(“ascii”)
# print type(b)
c = a.decode(“ascii”).encode(“utf-8”)
# print type(c)
在python中進行編碼轉換都是通過unicode作為中間值實現的。所以要先decode成unicode字符,然后再使用encode轉換成utf-8編碼的str??梢园炎⑨屓∠?,看下轉換過程中的類型。
ASCII 是一種字符集,包括大小寫的英文字母、數字、控制字符等,它用一個字節表示,范圍是 0-127 Unicode分為UTF-8和UTF-16。
UTF-8變長度的,最多 6 個字節,小于 127 的字符用一個字節表示,與 ASCII 字符集的結果一樣,ASCII 編碼下的英語文本不需要修改就可以當作 UTF-8 編碼進行處理。
Python 從 2.2 開始支持 Unicode ,函數 decode( char_set )可以實現 其它編碼到 Unicode 的轉換,函數 encode( char_set )實現 Unicode 到其它編碼方式的轉換。
比如
[python] view plain copy(“你好”).decode( “GB2312”)
將得到
u‘\u4f60\u597d’,
即 “你”和“好“的 Unicode 碼分別是 0x4f60 和 0x597d
再用
[python] view plain copy(u‘\u4f60\u597d’).encode(”UTF-8“)
將得到
‘\xe4\xbd\xa0\xe5\xa5\xbd’
它是 “你好”的UTF-8編碼結果。
python中使用 unicode的關鍵:unicode是一個類,函數unicode(str,”utf8“)從utf8編碼(當然也可以是別的編碼)的字符串str生成 unicode類的對象,而函數unc.encode(”utf8“)將unicode類的對象unc轉換為(編碼為)utf8編碼(當然也可以是別的編碼)的字符串。于是,編寫unicode相關程序,需要做的事情是 * 獲取數據(字符串)時,用unicode(str, ”utf8“)生成unicode對象 * 在程序中僅使用unicode對象,對程序中出現的字符串常量都以u”字符串“的形式書寫 * 輸出時,可將unicode對象轉換為任意編碼輸出,使用str.encode(”some_encoding“)
[python] view plain copy》》》 unicode(”你好“, ”utf8“)
u‘\u4f60\u597d’
》》》 x = _
》》》 type(x)
》》》 type(”你好“)
》》》 x.encode(”utf8“)
‘\xe4\xbd\xa0\xe5\xa5\xbd’
》》》 x.encode(”gbk“)
‘\xc4\xe3\xba\xc3’
》》》 x.encode(”gb2312“)
‘\xc4\xe3\xba\xc3’
》》》 print x
你好
》》》 print x.encode(”utf8“)
你好
》》》 print x.encode(”gbk“)
???
以上是測試結果(Ubuntu 6.06,locale為utf8),注意type(x)和type(”你好“)的區別。從編碼上可以看出utf8編碼與gbk不同。在utf8的 locale設置下,打印x按該環境變量編碼(我猜我猜我猜猜猜),而打印x.encode(”gbk“)則是亂碼。
python編碼亂碼問題ascii unicode utf-8
基礎知識部分
首先需明白python2.7默認使用的是ascii,而現在python3.x默認使用的是unicode。下面內容基于python2.7。
一、文件編碼
一般文件使用的是utf-8或者bgk編碼進行存儲。但是由于python2.7默認使用ascii,所以python2.7在運行py后綴文件時也是默認以ascii編碼讀取文件。如果文件中沒有中文不會出現問題。但是如果有中文的話,由于中文編碼超出了ascii編碼范圍,所以python2.7將會報錯。
所以我們需要在文件頭部添加:
#coding:utf-8
或者
#!/usr/bin/python
# -*- coding: utf-8 -*-1234
來告訴python2.7此文件要用utf-8編碼來讀取。
在文件中設置后我們可以使用 a = u‘哈’;python會自動使用utf-8來讀取漢字,并將其轉換為Unicode對象。1
二、字符串編碼
python2.7和字符串相關的數據類型,分別是標準字符串(str)是單字節字符序列,Unicode字符串(unicode)是雙字節字符序列。。
python的解碼,編碼是python自動進行的,如果我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。python2.7的函數str()和unicode()默認將對象轉成ascii編碼。
但是對于中文,ascii編碼是無法表示的。因此我們需要用sys.setdefaultencoding(‘utf-8’)來設置string對象默認的編碼。
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’) 123
那么字符串如何在str和unicode間進行轉換呢?python提供了兩個函數:
b = u‘哈’ //b為unicode對象
b.encode(‘utf-8’) //將b從unicode類型轉為utf-8類型
b.decode(‘utf-8’) //將b從utf-8類型轉換為Unicode類型123
三、window控制臺輸出
window控制臺默認使用gbk編碼。如果你設置了
# -*- coding: utf-8 -*-1
python直接按照utf-8輸出到控制臺。所以我們可以改變文件編碼:
# -*- coding: gbk -*-1
或者使用unicode類型進行輸出,會自動轉換。
評論
查看更多