久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python中的編碼與解碼

 rongq2007 2021-10-15


編碼與解碼

首先,明確一點,計算機中存儲的信息都是二進制的
 
編碼/解碼本質(zhì)上是一種映射(對應關(guān)系),,比如'a’用ascii編碼則是65,,計算機中存儲的就是00110101,但是顯示的時候不能顯示00110101,,還是要顯示'a',,但計算機怎么知道00110101是'a'呢,這就需要解碼,,當選擇用ascii解碼時,,當計算機讀到00110101時就到對應的ascii表里一查發(fā)現(xiàn)是'a',,就顯示為'a'
 
編碼:真實字符與二進制串的對應關(guān)系,,真實字符→二進制串
解碼:二進制串與真實字符的對應關(guān)系,二進制串→真實字符
 

ASCII & UTF-8

大家熟知的ASCII以1字節(jié)8個bit位表示一個字符,,首位全是0,,表示的字符集明顯不夠
unicode編碼系統(tǒng)是為表達任意語言而設(shè)計的,為了防止存儲上的冗余(比如,,對應ascii碼的部分),,其采用了變長編碼,但變長編碼給解碼帶來了困難,,無法判斷是幾個字節(jié)表示一個字符
UTF-8是針對unicode變長編碼設(shè)計的一種前綴嗎,,根據(jù)前綴可判斷是幾個字節(jié)表示一個字符

如果一個字節(jié)的第一位是0,則這個字節(jié)單獨就是一個字符,;如果第一位是1,,則連續(xù)有多少個1,就表示當前字符占用多少個字節(jié),。
比如"嚴"的unicode是4E25(100111000100101),,4E25處在第三行的范圍內(nèi)(0000 0800-0000 FFFF),因此"嚴"的UTF-8編碼需要三個字節(jié),,即格式是"1110xxxx 10xxxxxx 10xxxxxx",。然后,從"嚴"的最后一個二進制位開始,,依次從后向前填入格式中的x,,高位補0,得到"嚴"的UTF-8編碼是"11100100 10111000 10100101",。
 

python中的解碼和編碼

在python中,,編碼解碼其實是不同編碼系統(tǒng)間的轉(zhuǎn)換,默認情況下,,轉(zhuǎn)換目標是Unicode,,即編碼unicode→str,解碼str→unicode,,其中str指的是字節(jié)流
而str.decode是將字節(jié)流str按給定的解碼方式解碼,,并轉(zhuǎn)換成utf-8形式,u.encode是將unicode類按給定的編碼方式轉(zhuǎn)換成字節(jié)流str
注意調(diào)用encode方法的是unicode對象生成的是字節(jié)流,調(diào)用decode方法的是str對象(字節(jié)流)生成的是unicode對象,,若str對象調(diào)用encode會默認先按系統(tǒng)默認編碼方式decode成unicode對象再encode,,忽視了中間默認的decode往往導致報錯
自己寫代碼時只需記住str字節(jié)流調(diào)用decode,unicode對象調(diào)用
 
1
2
3
= u'嚴'
s
print type(s), s

第一行定義了一個unicode對象(不是utf8)

第二行會輸出u'\u4e25'

第三行輸出<type 'unicode'> 嚴

1
2
3
= s.encode('utf8')
u
print type(u),u

倘若這時我用s.encode('utf8'),,則將s使用utf-8編碼并將編碼結(jié)果保存為字節(jié)流

第二行輸出'\xe4\xb8\xa5'

第三行輸出<type 'str'> 涓

 
還有要注意的是,,終端默認的編碼格式是gbk,windows cmd中可以通過chcp查看以及改變,,也可以到注冊表修改終端默認編碼(HKEY_CURRENT_USER console或者powershell下的codepage),,936為簡體中文,65001為utf8,,兩者都可顯示中文,,但為了方便中文輸入,我將其默認設(shè)為936

當調(diào)用print函數(shù)將內(nèi)容格式化輸出到終端時,,會將unicode對象轉(zhuǎn)換為終端的編碼方式輸出,,如上面第一次print的結(jié)果是正常的,print utf8字節(jié)流時,,終端按其默認gbk解碼顯示時就會出問題,,這里恰巧'\xe4\xb8'為gbk下的“涓”
1
2
= s.encode('utf8').decode('utf8')
t
第二行會輸出u'\u4e25'
 

文件的編碼格式

保存文本時也有編碼格式,比如txt文件保存可選擇則ASCII,、utf8等,,對py文件可在前兩行注明編碼方式# -*- coding: UTF-8 -*-
在python中讀取文件
1
2
fr = open('encode.py','r')
fstr = fr.read()
只要記住fstr是字節(jié)流,其他的操作參看上面即可
 
注:以上操作均在cmd或powershell下完成,,在python自帶的解釋器下會有問題,,s=u'你好',然后s,,顯示的雖然是unicode對象,,但是編碼卻是gbk的而不是unicode
 

參考

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多