python3默認編碼
❶ python3.x默認使用的編碼是什麼
Python3.X 默認使用的編碼是 utf-8
❷ python編程(三級)1、編碼、數制
在計算機中使用的是二進制,(為什麼呢,因為二進制計算簡單,可以用電路表示等等很多優點)。但是二進制對閱讀和使用是不友好的,因此需要將二進制轉換為人類使用的語言,英語,中文等,這就是編碼。
最初的編碼就是ASCII編碼,美國信息交換碼。它使用一個位元組,8位二進制,可以表示128個符號。常用的1-9,26個字母以及一些英語符號等。
ascii表是不能表示中文的,因此中文也有專門的編碼,諸如GB2312,GBK等。其它國家也有類似編碼,因此為了方便信息的交流,也就有了統一編碼,Unicode,又叫萬國碼。unicode用0-65535來表示所有字元,Unicode用2-4個位元組存儲。不同的存儲方式,又不同的編碼,這就是UTF-8,UTF-16,UTF-32。utf-8根據字元數字的大小,來決定存儲位元組,存儲英文字元時用1個位元組,存儲漢字時用2個位元組。utf-16,兩個位元組,utf-32,四個位元組。
python3 在內存中使用的是Unicode,萬國碼,默認的編碼是utf-8。
chr() ,轉換為對應Unicode表字元
ord(),轉換為對於Unicode表數字
encode(),編碼,將str轉換為位元組流
decode(),解碼,將位元組流轉換為str
計算機存儲數據的格式是二進制,日常和數學中使用的數字是十進制,為了表達簡化,因此有了十六進制、八進制。
二進制---->十進制---->八進制---》十六進制
10000001 ---》129 ---》201---》81
從上式可以看出來,進制越大,表達更大數時更簡化。
二進制轉十進制 ,按權展開相加
十進制轉二進制,除基取余
二進制轉八進制 ,從右往左,取3位轉換為十進製得到即為8進制,不足3位左邊補0。
八進制轉二進制,每位展開得到3個二進制位
二進制轉十六進制,,從右往左,取4位轉換為十進製得到即為16進制,不足3位左邊補0。
十六進制轉二進制,每位展開得到四個二進制位
int() ,
hex(),轉換為16進制
bin(),轉換為二進制
oct(),轉換為八進制
❸ python3.4 編碼有哪些
Python3中的編碼問題前,第一個段落對位元組、ASCII與Unicode與UTF-8等進行基本介紹,如果不對這幾種編碼犯頭暈,可直接跳過。
ASCII與Unicode與UTF-8與GBK
首先從老大哥說起。跟很多人一樣,大學讀了這么久,久仰ASCII編碼的大名。要說這個老大哥,我們再先從位元組說起。一個位元組包括八個比特位,每個比特位表示0或1,一個位元組即可表示從00000000到11111111共2^8=256個數字。一個ASCII編碼使用一個位元組(除去位元組的最高位作為作奇偶校驗位),ASCII編碼實際使用一個位元組中的7個比特位來表示字元,共可表示2^7=128個字元。比如那時寫C語言的程序,就經常要背下ASCII編碼中的01000001(即十進制的65)表示字元『A』,01000001加上32之後的01100001(即十進制的97)表示字元『a』。現在打開Python,調用chr和ord函數,我們可以看到Python為我們對ASCII編碼進行了轉換。
第一個00000000表示空字元,因此ASCII編碼實際上只包括了
字母、標點符號、特殊符號等共127個字元。因為ASCII是在美國出生的,對於由字母組成單詞進而用單詞表達的英文來說也是夠了。但是中國人、日本人、
韓國人等其他語言的人不服了。中文是一個字一個字,ASCII編碼用上了渾身解數256個字元都不夠用。
因此後來出現了Unicode編碼。Unicode編碼通常由兩個位元組組成,共表示256*256個字元,即所謂的UCS-2。某些偏僻字還會用到四個位元組,即所謂的UCS-4。也就是說Unicode標准也還在發展。但UCS-4出現的比較少,我們先記住:最原始的ASCII編碼使用一個位元組編碼,但由於語言差異字元眾多,人們用上了兩個位元組,出現了統一的、囊括多國語言的Unicode編碼。
在Unicode中,原本ASCII中的127個字元只需在前面補一個全零的位元組即可,比如前文談到的字元『a』:01100001,在Unicode中變成了00000000 01100001。不久,美國人不開心了,吃上了世界民族之林的大鍋飯,原本只需一個位元組就能傳輸的英文現在變成兩個位元組,非常浪費存儲空間和傳輸速度。
人們再發揮聰明才智,於是出現了UTF-8編碼。因為針對的是空間浪費問題,因此這種UTF-8編碼是可變長短的,從英文字母的一個位元組,到中文的通常的三個位元組,再到某些生僻字的六個位元組。解決了空間問題,UTF-8編碼還有一個神奇的附加功能,那就是兼容了老大哥的ASCII編碼。一些老古董軟體現在在UTF-8編碼中可以繼續工作。
注意除了英文字母相同,漢字在Unicode編碼和UTF-8編碼中通常是不同的。比如漢字的『中』字在Unicode中是01001110
00101101,而在UTF-8編碼中是11100100 10111000
10101101。
我們祖國母親自然也有自己的一套標准。那就是GB2312和GBK。當然現在挺少看到。通常都是直接使用UTF-8。記得我唯一一次看到GB編碼的網頁,是一個成人網站。
Python3中的默認編碼
Python3中默認是UTF-8,我們通過以下代碼:
import sys
sys.getdefaultencoding()
可查看Python3的默認編碼。
Python3中的encode和decode
Python3中字元編碼經常會使用到decode和encode函數。特別是在抓取網頁中,這兩個函數用的熟練非常有好處。我的理解,encode的作用,使我們看到的直觀的字元轉換成計算機內的位元組形式。decode剛好相反,把位元組形式的字元轉換成我們看的懂的、直觀的、「人模人樣」的形式。如下圖。
\x表示後面是十六進制,\xe4\xb8\xad即是二進制的11100100 10111000
10101101。也就是說漢字『中』encode成位元組形式,是11100100 10111000
10101101。同理,我們拿11100100
10111000 10101101也就是\xe4\xb8\xad來decode回來,就是漢字『中』。完整的應該是b'\xe4\xb8\xad',在Python3中,以位元組形式表示的字元串則必須加上前綴b,也就是寫成上文的b'xxxx'形式。
前文說的Python3的默認編碼是UTF-8,所以我們可以看到,Python處理這些字元的時候是以UTF-8來處理的。因此從上圖可以看到,就算我們通過encode('utf-8')特意把字元encode為UTF-8編碼,出來的結果還是相同:b'\xe4\xb8\xad'。
明白了這一點,同時我們知道UTF-8兼容ASCII,我們可以猜想大學時經常背誦的『A』對應ASCII中的65,在這里是不是也能正確的decode出來呢。十進制的65轉換成十六進制是41,我們嘗試下:
b'\x41'.decode()
結果如下。果然是字元『A』
Python3中的編碼轉換
據說字元在計算機的內存中統一是以Unicode編碼的。只有在字元要被寫進文件、存進硬碟或者從伺服器發送至客戶端(例如網頁前端的代碼)時會變成utf-8。但其實我比較關心怎麼把這些字元以Unicode的位元組形式表現出來,露出它在內存中的廬山正面目的。這里有個照妖鏡:
xxxx.encode/decode('unicode-escape')
輸出如下
b'\\u4e2d'還是b'\u4e2d,一個斜杠貌似沒影響。同時可以發現在shell窗口中,直接輸'\u4e2d'和輸入b'\u4e2d'.decode('unicode-escape')是相同的,都會列印出漢字『中』,反而是'\u4e2d'.decode('unicode-escape')會報錯。說明說明Python3不僅支持Unicode,而且一個『\uxxxx』格式的Unicode字元可被辨識且被等價於str類型。
如果我們知道一個Unicode位元組碼,怎麼變成UTF-8的位元組碼呢。懂了以上這些,現在我們就有思路了,先decode,再encode。代碼如下:
xxx.decode('unicode-escape').encode()
測試如下:
可以看到最後輸出的UTF-8位元組與上面的相同。嘗試成功。所以其他的編碼之間的轉換,大概也是如此。
最後的擴展
還記得剛剛那個ord嗎。時代變遷,老大哥ASCII被人合並,但ord還是有用武之地。試試ord('中'),輸出結果是20013。20013是什麼呢,我們再試試hex(ord('中')),輸出結果是'0x4e2d',也就是20013是我們在上文見面了無數次的x4e2d的十進制值。這里說下hex,是用來轉換成十六進制的函數,學過單片機的人對hex肯定不會陌生。
最後的擴展,在網上看到的他人的問題。我們寫下類似於'\u4e2d'的字元,Python3知道我們想表達什麼。但是讓Python讀取某個文件的時候出現了'\u4e2d',是不是計算機就不認識它了呢?後來下文有人給出了答案。如下:
import codecs
file = codecs.open( "a.txt", "r", "unicode-escape" )
u = file.read()
print(u)
❹ 在樹莓派上的python3
1、首先查看樹莓派上自帶的python版本和執行程序所在位置,默認是python 2版本的。
2、起始python3在樹莓派上也已經默認安裝了。採用python3進行區別版本2。查看python3的版本和位置
關於python2和python3的主要區別
1.在Python2中,print是一個列印語句,將Python後面的內容視為元組對象,直接列印出來,;在Python3中做為函數存在。
2.編碼的改變。Python2默認ASCII編碼方式,但是ASCII編碼無法對中文等字元進行有效編碼。Python3默認採用了UTF-8編碼。
3.True和False的改變。Python2把True 和False視為全局變數,可以隨意賦值。Python3把True和False變成了兩個關鍵字,指向了兩個固定的對象,不能再被重新賦值。
4.nonlocal關鍵字。Python2中要想在 嵌套函數 中將一個變數聲明為非局部變數是不可能的;Python3中加入了nonlocal關鍵字,可以在嵌套函數中給變數前面添加關鍵字nonlocal,就可在嵌套函數之外使用嵌套函數中的變數。
❺ python3讀文件編碼錯誤怎麼辦
在python3中系統默認編碼是unicode,讀取文件經常會編碼錯誤導致報錯。
首先先確認要讀取文件的編碼,可這樣操作:
記事本打開文本文件,點擊「文件」-「另存為」查看編碼:
importcodecs
f=codecs.open(r"test.txt","r","gbk")
print(f.read())
f.close()
(示例的文件是ANSI所以使用GBK讀取)
以上就可以正確讀取想要的文件了
❻ python2.0與python3.0的區別。
Python2.0與Python3.0主要區別在於以下幾個方面:
1、輸出
Python2.0使用print關鍵字進行輸出,比如:print 「Hello」;
Python3.0使用print()函數,比如print("Hello")。
2、輸入方面
Python2.0使用raw_input()函數,比如:name=raw_input("請輸入你的名字:");
Python3.0使用input()函數,比如:name=input("請輸入你的名字:")。
3、字元串的編碼格式
Python2.0默認採用ASCII編碼對輸入的字元串進行編碼;
而Python3.0默認採用Unicode編碼對字元串進行編碼。
4、格式化字元串的方式
Python2.0用%佔位符進行標准化格式輸出字元串,比如:「Hello,%s" % ("World");
Python3.0用format()函數,比如:」Hello,{}「.format("World")。
5、源文件的編碼格式
Python2.0默認採用ASCII,因此使用中文時要在源文件開頭加上一行注釋:# -- coding: utf-8 --;
Python3.0默認採用utf-8。
❼ python3如何把字元串轉換成系統默認編碼
python 3和2很大區別就是python本身改為默認用unicode編碼。
字元串不再區分"abc"和u"abc", 字元串"abc"默認就是unicode,不再代表本地編碼、
由於有這種內部編碼,像c#和java類似,再沒有必要在語言環境內做類似設置編碼,比如「sys.setdefaultencoding」;
也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴展包要適應這種情況改寫。
另一個問題是語言環境內只有unicode怎麼輸出gbk之類的本地編碼。
答按慣例都在(序列化)輸出時才轉換成本地編碼。
比如
1
file.write("GBK的中文".encode("GBK"))
python環境內字元串用str.encode("GBK")方法輸出成位元組串用於和其他環境交流。
❽ python代碼的注釋有幾種
python代碼的注釋有兩種。一、python單行注釋符號(#)
python中單行注釋採用#開頭,示例:#thisisacomment。
二、批量、多行注釋符號
多行注釋是用三引號,例如:輸入''''''或者"""",將要注釋的代碼插在中間。
Python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆於1990年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。"
❾ python3 decode()和encode()默認是什麼編碼格式
默認是utf-8
python3全面支持utf-8,再也不必為編碼煩惱了