首頁  >  文章  >  後端開發  >  淺談python學習之字元編碼與字串

淺談python學習之字元編碼與字串

青灯夜游
青灯夜游轉載
2018-10-29 17:54:151629瀏覽

本篇文章帶給大家的內容是淺談python學習之字符編碼與字串。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

字元編碼是什麼?

例如漢字#”,可以用以下表示

十進制:20013

二進位:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8)##十六

## u4e2d

ascii編碼

#ASCII
    編碼是
  • 1個位元組

  • 只能編碼純英文
  • 節省空間

  • ##unicode編碼Unicode編碼通常是2#個位元組。 (例如字母AASCII編碼是十進位的

    65
  • ,二進位的
  • 01000001

    ;A

    Unicode
  • 編碼是
  • 00000000 01000001

    .)uicode統一編碼,解決編碼衝突,亂碼問題消失

#比ascii多一倍的儲存空間,儲存和傳送時不划算(

UTF-8

解決 )utf-8編碼(可變長的unicode編碼)UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1

個字節,漢字通常是3個字節,只有很生僻的字元才會被編碼成4 -6個位元組。 字元ASCII#UnicodeUTF-8A0100000100000000 01000001#01000001
##########x################################################################################################################################################# #01001110 00101101######11100100 10111000 10101101#############

1)如果你要傳輸的文字包含大量英文字符,用UTF-8編碼就能節省空間;

2)ASCII 編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支援ASCII#編碼的歷史遺留軟體可以在UTF-8編碼下繼續運作。

電腦系統通用的字元編碼運作方式:

記憶體:統一unicode編碼

#硬碟、傳輸:轉換成utf-8

瀏覽網頁的時候,伺服器會把動態產生的Unicode內容轉換成UTF-8再傳送到瀏覽器。

Python的字串

#相關函數

  • ord()函數取得字符的整數表示(單一字元)參數為要操作的單一字符,並傳回一個整數。

  • chr()函數#將編碼轉換成對應的字元(單一字元)

  • encode()函數,將str##字串以指定的編碼方式(參數)變成bytes

'str'.encode

ascii/utf-8)傳回bytes字串

#中文以ascii編碼會報錯

  • decode()函數把從網路或磁碟上讀取的bytes以指定的編碼方式(參數)變成str

'bytes'.decode(ascii/utf-8)回傳str字串

bytes無法解碼會報錯,

如果bytes中只有一小部分無效的字節,可以傳入errors='ignore'忽略錯誤的位元組

> >> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'

  • len( )函數,計算字串包含字元個數

#>>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6

在最新的Python 3版本中,字串是以Unicode#的,也就是說,Python的字串支援多語言

Python

的字串類型是str,如果要在網路上傳輸,或儲存到磁碟上,就需要把str變成bytes

>>為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str bytes進行轉換<<

str和bytes的差異

  • 1)str一個字元對應若干個位元組bytes的每個字元都只佔用一個位元組。 (將多位元組的字元分解為單字節的多字元)

#>>> 'ABC'.encode('ascii') b'ABC ' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'

#在bytes中,無法顯示為ASCII字元的字節,以\x##顯示。

  • 2)bytes字元帶前綴,帶引號

.py檔案中含中文要用utf-8編碼

#!/usr/bin/env python3 # -*- coding: utf-8 -*-

第一行註解是為了告訴 Linux/OS X系統,這是一個Python可執行程序,##Windows系統會忽略這個註解;

第二行註解是為了告訴Python解釋器,依照UTF-8編碼讀取原始程式碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。

>>編輯器用UTF-8 without BOM<<

#字串格式化問題

>>> 'Hello, %s' % 'world' 'Hello, world' >> ;> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'

%運算子

  • 就是用來格式化字串的。在字串內部有幾個%?佔位符,後面就跟幾個變數或值,順序要對應好。如果只有一個%?,括號可以省略。

  • 轉義,用%%來表示一個%

> ;>> 'growth rate: %d %%' % 7 'growth rate: 7 %'

##佔位符%d#%f#%s%x
取代內容
整數
字串
1十六進位整數

#format()另一種格式化字串的方法是使用字串的format()方法,它會用傳入的參數依序取代字串內的佔位符

{0}

{1}…###,不過這種方式寫起來比#####%##### ##要麻煩得多:#########>>> 'Hello, {0}, 成績提升了{1:.1f}%'.format('小明', 17.125) ' Hello, 小明, 成績提升了17.1%'###

以上是淺談python學習之字元編碼與字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除