包含python關於編碼basic的詞條

本文目錄一覽:

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)

python程序有哪些編碼規範

編碼格式聲明

通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字符,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的。

縮進

統一使用 4 個空格進行縮進。絕對不要用tab, 也不要tab和空格混用。對於行連接的情況,我一般使用4空格的懸掛式縮進。例如:

引號

自然語言使用雙引號

機器標識使用單引號

正則表達式使用雙引號

空行

編碼格式聲明、模塊導入、常量和全局變量聲明、頂級定義和執行代碼之間空兩行

頂級定義之間空兩行,方法定義之間空一行

在函數或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行

導入模塊

導入總應該放在文件頂部,位於模塊注釋和文檔字符串之後,模塊全局變量和常量之前。導入應該按照從最通用到最不通用的順序分組,分組之間空一行

標準庫導入

第三方庫導入

應用程序指定導入

命名規範

模塊盡量使用小寫命名,首字母保持小寫,盡量不要用下劃線

類名使用駝峰(CamelCase)命名風格,首字母大寫,私有類可用一個下劃線開頭

函數名一律小寫,如有多個單詞,用下劃線隔開

私有函數可用一個下劃線開頭

變量名盡量小寫, 如有多個單詞,用下劃線隔開

常量採用全大寫,如有多個單詞,使用下劃線隔開

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有哪幾種編碼方式

第一種: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編碼就能節省空間。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246425.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:15
下一篇 2024-12-12 13:15

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論