pyhton python的基礎字串和編碼

2021-09-01 06:28:08 字數 2994 閱讀 8159

計算機只能處理數字,如果要處理文字,就必須把文字轉換為數字才能處理。

最早8個位元(bit)等於1個位元組(byte)。表示最大整數為255(11111111)。美國採用ascii編碼,最早只有127個字元被編碼到計算機,而處理中文最少需要2個位元組,所以中國制定了gb2312編碼,各國有了各國的編碼,因此在多語言文字中,就會產生亂碼,所以unicode編碼產生,既可以對英文編碼,也可以對中文編碼。但是ascii編碼通常用乙個位元組,而unicode編碼要用2個位元組。如果都用unicode編碼,那麼新的問題就是儲存和傳輸的空間就要變得更大,因為節約,就產生了utf-8編碼,utf-8把字母和漢字分為常用和不常用,常用的英文編成1個位元組,常用的漢字編為3個位元組。

現在在計算機中,統一使用unicode編碼,當要儲存或者傳輸的時候就採用utf-8編碼。

比如在記事本裡面編輯的時候,我們使用的是unicode編碼,當變成txt檔案格式時,用utf-8編碼

瀏覽網頁的時候,伺服器把生成的unicode內容轉換為utf-8傳到瀏覽器,也就是用**編網頁的時候,用的是unicode,當網頁顯示出來,我們看到的時候,為utf-8編碼。

在python中,字串用unicode編碼

1.整數編碼

ord()函式,獲取字元的整數表示,例如ord('a'),得到65,ord(『中』),得到20013

chr()函式,把編碼轉換為對應的字元,chr(66),得到『b』,chr(25591),得到『文『

還可以用十六進製制寫,例如『\u4e2d\u6587』,得到『中文』

2.字元與位元組的轉換(str與bytes的轉換)

***python對bytes型別的資料用帶b字首的單引號或者雙引號表示。

轉換原因:在網路上傳輸,或者儲存到磁碟上,就需要把字元str變為位元組bytes。

乙個字元對應若干位元組。所以str型別占用多個位元組

byte的每個字元都占用乙個位元組。轉換為byte後,所佔位元組數變少

例如:x=b'abc'                  'abc'和b『abc』,後者雖然內容顯示和前者一樣,但前者是字元str型別,乙個字元佔若干位元組後者是bytes型別,每個字元佔乙個位元組。

(1)encode()方法:把str可以編碼為指定的bytes型別

我們對str型別的字串『abc』進行ascii編碼,變為b'abc',此時型別變為bytes型別

對含有漢字的str型別進行ascii編碼,產生錯誤,因為ascii不能編碼漢字,於是我們又用utf-8編碼將str型別的『中文』轉換為bytes型別b'\xe4\xb8\xad\xe6\x96\x87'

(2)decode()方法:將bytes型別指定編碼為str型別

如果用bytes型別的漢字用ascii編碼為str型別也是不可以的,如果bytes中包含無法解碼的位元組,也會報錯

如果你忘記了一部分位元組的utf-8的編碼,而又不想程式出錯,你可以在新增errors=『ignore』,忽略錯誤的位元組

3.len()方法:測出str型別的字元數或者bytes型別的位元組數

乙個中文字元被utf-8編碼之後,佔3個位元組,1個英文本元只佔1個位元組。

在儲存python源**的時候,要指定格式為utf-8編碼,如果python直譯器讀取源**的時候,也要按照utf-8編碼讀取,我們通常在python**開頭寫上

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

第一行是告訴linux/os x系統,這是乙個python可執行程式,windows會忽略這個注釋

第二行是為了告訴python直譯器,要按照utf-8編碼讀取源**,否則會出現亂碼。

要確保文字編輯器在使用utf-8 without bom編碼

-*-符號%就是用來格式化字串的-*-

我們有時候會輸出『親愛噠***你好,你的xx月的花費是xx,餘額是xx』之類的字串,其中***表示的內容都是根據輸入的變數變化的。

在python中,輸出字串中變數的形式和c語言一樣,用%實現。

如果格式化的字串後面也就是%後面只跟乙個引數,那麼可以去掉括號。

%s表示用字串替換,當你不清楚要輸入什麼型別時,%s永遠起作用,它可以把任何資料型別轉換為字串。

上面是佔位符和替換內容的對應

與c語言一樣,當我們格式化字串的時候,可以格式化整數和標點數,我們可以這樣寫%2d;%02d;%.2f,他們所代表的的內容依次是輸出兩位數的整數;輸出兩位數的整數,如果此時只有一位數,那麼在首位補0;輸出小數點後兩位。

但是有時候我們需要在字串裡面輸出%。就好像下面的情景

我們直接把%新增在裡面,會報錯,這個時候我們需要在%後面新增乙個%,就好像我在python基礎語法裡面寫的一樣,我們需要轉義,合法的輸出我們需要輸出的。

format()方法會用傳入的引數一次替換字串的佔位符,,......,這種方法比較麻煩,但是當資料多的時候,不容易出錯。

網路基礎的基礎

終端 鍵盤和顯示器 應有技術分類 ethnet token ring fddi 區域網 pstn isdn ddn frame relay x.25 都會網路 廣域網 層次 核心層 匯聚層 接入層 osi 開放網路互連 應用層 表示層 對話層 傳輸層 網路層 tcp ip 資料鏈路層 物理層 封裝 ...

彙編基礎的基礎

一 cup和記憶體的訪問 1 位址線,位址匯流排的寬度決定了cup的定址能力 2 資料線,資料匯流排的寬度決定了cup與其他器件進行資料傳送時的一次資料傳送量 3 控制線,控制匯流排的寬度決定了cup對系統中其他器件的控制能力 二 以8086cup十六位為例暫存器 ax bx cx dx si di...

基礎中的基礎

console.log 我是乙個字串 console.info 我是提示訊息 console.warn 我是警告訊息 console.error 我是錯誤資訊 console.count 統計次數 console.table 列印物件格式 console.dirxml 我是某個節點的html con...