天天看點

python3編碼得到中文_Python3中如何得到Unicode碼對應的中文?

我從Python字元串的編碼和解碼的角度來說說這個問題。字元編碼對于了解非英語字元的有關内容非常有幫助。

從本質上來說,編碼和解碼就是Python中str和bytes這兩種字元串類型之間的互相轉換。

str包含一個encode方法,使用特定編碼将該字元串其轉換為一個bytes,這稱之為編碼。bytes類包含了一個decode方法,也接受一個編碼作為單個必要參數,并傳回一個str,這稱之為解碼。這種轉換操作是顯式的操作,且必須根據資料被編碼時采用的編碼類型進行解碼。

首先說說編碼,即将unicode的str文本字元串轉換為bytes的位元組字元串,可以顯式的傳入指定編碼(一般來說采用utf-8編碼),或使用平台的預設編碼。

s = 'π排球の'

b1 = s.encode('utf-8')

b2 = s.encode()

print(b1)

print(b2)

b'\xcf\x80\xe6\x8e\x92\xe7\x90\x83\xe3\x81\xae'

b'\xcf\x80\xe6\x8e\x92\xe7\x90\x83\xe3\x81\xae'

那麼我們看看,在不寫編碼的時候,平台預設的編碼方式到底是什麼

import sys

print(sys.platform)

print(sys.getdefaultencoding())

win32

utf-8

可以看出我這個平台預設選擇的就是utf-8編碼方式。

那對應的,再來談談decode解碼方法

将bytes類型字元串轉換成str類型的unicode文本字元串也是一樣,要麼指定編碼參數,要麼使用平台的預設參數。這個例子中,我們要操作的位元組字元串b是通過utf-8編碼方式對文本字元串'π排球の'編碼而形成的。

b = b'\xe6\x8e\x92\xe7\x90\x83'

s1 = b.decode(encoding='utf-8')

s2 = b.decode()

s3 = b.decode(encoding='latin-1')

print(s1)

print(s2)

print(s3)

排球

排球

排çƒ

從結果中我們可以看出,我們利用utf-8對位元組字元串進行解碼,可以獲得正确的漢字字元串。而值得注意的是,最後一行代碼想通過latin-1解碼位元組字元串,由于位元組字元串是通過utf-8編碼形成,是以這樣解碼形成得到的隻能是亂碼。

希望從這個角度,有助于大家對于擷取中文有了更好的了解。

更系統、更深入的探讨可進入我們的專欄《Python資料科學之路》醬油哥:來吧,一起踏上Python資料科學之路​zhuanlan.zhihu.com

python3編碼得到中文_Python3中如何得到Unicode碼對應的中文?

本專欄仿照美劇的劇集編排方式和整體邏輯架構進行組織,目前策劃共分為七季:

第一季:Python程式設計語言核心基礎。

第二季:Python資料分析基本工具。

第三季:機器學習線性代數核心-Python描述。

第四季:利用python進行時間序列分析。

第五季:機器學習機率統計核心-Python描述。

第六季:機器學習典型算法專題。

第七季:實戰熱點深度應用。

讓我們一步一個台階,共同踏上Python資料科學之旅。