本文目錄一覽:
- 1、python有哪幾種編碼方式
- 2、怎麼在Python里使用UTF-8編碼
- 3、Python編碼時應該注意的幾個情況
- 4、python是什麼編碼格式
- 5、Python 源程序編碼注意事項?
- 6、Python 編碼轉換與中文處理
python有哪幾種編碼方式
第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標準IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字元是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關係表,一個位元組只能最多表示256個字元,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免衝突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間。
怎麼在Python里使用UTF-8編碼
概述
在python代碼即.py文件的頭部聲明即可
解析
py文件中的編碼
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼範圍內的字元的時候就要使用”編碼指示”來修正一個 module 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:
# -*- coding=utf-8 -*-
#coding=utf-8
# 以上兩種選其一即可
其他的編碼如:gbk、gb2312也可以;否則會出現:
SyntaxError: Non-ASCII character ‘\xe4’ in file test.py on line 3, but no encoding declared; see for details
python中的編碼與解碼
先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode,他們都是basestring的派生類;
str類型是一個包含Characters represent (at least) 8-bit bytes的序列;
unicode 的每個 unit 是一個 unicode obj;
在str的文檔中有這樣的一句話:
The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.
也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。
拓展內容
utf-8編碼
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,也是一種前綴碼。它可以用來表示Unicode標準中的任何字元,且其編碼中的第一個位元組仍與ASCII兼容,這使得原來處理ASCII字元的軟體無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。
UTF-8使用一至六個位元組為每個字元編碼(儘管如此,2003年11月UTF-8被RFC 3629重新規範,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個位元組):
1、128個US-ASCII字元只需一個位元組編碼(Unicode範圍由U+0000至U+007F)。
2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個位元組編碼(Unicode範圍由U+0080至U+07FF)。
3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個位元組編碼(Unicode範圍由U+0800至U+FFFF)。
4、其他極少使用的Unicode 輔助平面的字元使用四至六位元組編碼(Unicode範圍由U+10000至U+1FFFFF使用四位元組,Unicode範圍由U+200000至U+3FFFFFF使用五位元組,Unicode範圍由U+4000000至U+7FFFFFFF使用六位元組)。
對上述提及的第四種字元而言,UTF-8使用四至六個位元組來編碼似乎太耗費資源了。但UTF-8對所有常用的字元都可以用三個位元組表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字元同樣需要四個位元組來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布範圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮演算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標準壓縮格式(SCSU)。
互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟體都支持UTF-8編碼。
Python編碼時應該注意的幾個情況
# 交換兩個變數
a, b = b, a
# 切片(slice)操作符中的step參數。(切片操作符在python中的原型是[start:stop:step],即:[開始索引:結束索引:步長值])
a = [1,2,3,4,5]
a[::2] # 遍歷列表中增量為2的數據
[1,3,5]
# 特殊情況下,`x[::-1]`是實現x逆序的實用的方式
a[::-1]
[5,4,3,2,1]
# 逆序並切片
x[::-1]
[5, 4, 3, 2, 1]
x[::-2]
[5, 3, 1]
python是什麼編碼格式
python編碼總結:
1).首先python有兩種格式的字元串,str和unicode,其中unicode相當於位元組碼那樣,可以跨平台使用。
str轉化為unicode可以通過unicode(),u,str.decode三種方式
unicode轉化為str,如果有中文的話,一般通過encode的方式
2).如果代碼中有中文的話,我們一般會添加 “# coding=utf-8″,這個是什麼作用呢,一般如下:
如果代碼中有中文注釋,就需要此聲明比較高級的編輯器(比如我的emacs),會根據頭部聲明,將此作為代碼文件的格式。程序會通過
頭部聲明,解碼初始化 u」人生苦短」,這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致
所以,當我們填上編碼頭的時候,使用s=”中文”,實際上type(s)是一個str,是已經將unicode以utf-8格式編碼成str。
其次,如果我們在代碼中使用s=u’中文’,相當於將str以utf-8解碼成unicode。
推薦學習《python教程》。
Python 源程序編碼注意事項?
默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字元可以同時用在字元串、標識符和注釋中 — 儘管 Python 標準庫僅使用 ASCII 字元作為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字元,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字元。
你也可以為源文件制定不同的字元編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:
# -*- coding: encoding -*-
通過此聲明,源文件中所有的東西都會被當作用 encoding 指代的 UTF-8 編碼對待。在 Python 庫參考手冊 codecs 一節中你可以找到一張可用的編碼列表。
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
# -*- coding: cp-1252 -*-
這樣就可以在源文件中使用 Windows-1252 字符集中的所有字元了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。
Python 編碼轉換與中文處理
python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字符集.
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼範圍內的字元的時候就要使用” 編碼指示 “來修正一個 module 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的編碼如:gbk、gb2312也可以;否則會出現:
先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode ,他們都是basestring的派生類;
在str的文檔中有這樣的一句話:
也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。
unicode 轉為 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 轉為 unicode,
如果直接執行s.encode(‘gb2312’)會發生什麼?
這裡會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。
拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:
對於這種情況,我們有兩種方法來改正錯誤:
s = ‘中文’
s.decode(‘utf-8’).encode(‘gb2312’) “`
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding(‘utf-8’)
str = ‘中文’
str.encode(‘gb2312’)
print open(“Test.txt”).read()
import codecs
print open(“Test.txt”).read().decode(“utf-8”)
Traceback (most recent call last):
File “ChineseTest.py”, line 3, in module
print open(“Test.txt”).read().decode(“utf-8”)
UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\ufeff’ in position 0: illegal multibyte sequence
import codecs
data = open(“Test.txt”).read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode(“utf-8”)
s = “中文”
print unicode(s, “utf-8”)
Traceback (most recent call last):
File “ChineseTest.py”, line 3, in module
s = unicode(s, “utf-8”)
UnicodeDecodeError: ‘utf8’ codec can’t decode bytes in position 0-1: invalid data
s = “中文”
print unicode(s, “gbk”)
s = “中文”
print unicode(s, “cp936”)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243037.html