国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于python編碼,你真的明白了嗎

darcrand / 2134人閱讀

摘要:二進制位,是計算機內(nèi)部數(shù)據(jù)儲存的最小單位,是一個位二進制數(shù)。由于源代碼也是一個文本文件,所以,當(dāng)你的源代碼中包含中文的時候,在保存源代碼時,就需要務(wù)必指定保存為編碼。

計算機存儲的幾個概念

想要徹底搞清楚編碼問題,我們必須要先搞清楚計算機是怎么存儲數(shù)據(jù)的,這就涉及到了計算機基礎(chǔ)的幾個概念了,開篇我們就先來捋捋這幾個容易混淆的概念。

bit

二進制位, 是計算機內(nèi)部數(shù)據(jù)儲存的最小單位,11010100是一個8位二進制數(shù)。一個二進制位只可以表示0和1兩種狀態(tài)(2^1);兩個二進制位可以表示00、01、10、11四種(2^2)狀態(tài);三位二進制數(shù)可表示八種狀態(tài)(2^3)……

Byte

字節(jié),是計算機中數(shù)據(jù)處理的基本單位,計算機中以字節(jié)為單位存儲和解釋信息,規(guī)定一個字節(jié)由八個二進制位構(gòu)成,即1個字節(jié)等于8個比特(1Byte=8bit)。八位二進制數(shù)最小為00000000,最大為11111111;通常1個字節(jié)可以存入一個ASCII碼,2個字節(jié)可以存放一個漢字國標碼。

在計算機中,一串?dāng)?shù)碼作為一個整體來處理或運算的,稱為一個計算機字,簡稱宇。字通常分為若干個字節(jié)(每個字節(jié)一般是8位)。在存儲器中,通常每個單元存儲一個字,因此每個字都是可以尋址的。字的長度用位數(shù)來表示。在計算機的運算器、控制器中,通常都是以字為單位進行傳送的。

字長

字長:電腦技術(shù)中對CPU在單位時間內(nèi)(同一時間)能一次處理的二進制數(shù)的位數(shù)叫字長。所以能處理字長為8位數(shù)據(jù)的CPU通常就叫8位的CPU。同理32位的CPU就能在單位時間內(nèi)處理字長為32位的二進制數(shù)據(jù)。

字節(jié)和字長的區(qū)別:由于常用的英文字符用8位二進制就可以表示,所以通常就將8位稱為一個字節(jié)。字長的長度是不固定的,對于不同的CPU、字長的長度也不一樣。8位的CPU一次只能處理一個字節(jié),而32位的CPU一次就能處理4個字節(jié),同理字長為64位的CPU一次可以處理8個字節(jié)。

常見的編碼

ASCII: 1個字節(jié),只編碼英文字母和符號

gb2312: 2個字節(jié),增加了中文漢字和符號

Unicode: 把所有語言都統(tǒng)一到一套編碼里把所有語言都統(tǒng)一到一套編碼里,
一般是2個字節(jié),生僻字4個字節(jié)

utf-8: 可變長編碼,常用的英文字母被編碼成1個字節(jié),漢字通常是3個字節(jié),只有很生僻的字符才會被編碼成4-6個字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址肬TF-8編碼就能節(jié)省空間:

在計算機內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r候,就轉(zhuǎn)換為UTF-8編碼,這樣可以節(jié)省很多存儲空間。

Python編碼

注:這里討論的是python2.7的情況

兩個函數(shù)

在python中,str和unicode都是basestring的子類,basestring有以下兩個方法:

encode(): 將unicode字符串轉(zhuǎn)換為其他編碼字符串,參數(shù)為轉(zhuǎn)換后編碼

decode(): 將其他編碼轉(zhuǎn)換為unicode字符串,參數(shù)為轉(zhuǎn)換前編碼

PS:"string".decode("utf-8") == unicode("string", "utf-8")

一個栗子
s = "中文"
print type(s), len(s)

u = u"中文"
print type(u), len(u)

u2s = u"中文".encode("utf-8")
print type(u2s), len(u2s)

結(jié)果是這樣的

 6
 2
 6

console下查看u2s

>>> u"中文".encode("utf-8")
"xe4xb8xadxe6x96x87"

結(jié)論:

python中定義的一個str變量實則是字節(jié)串,由Unicode經(jīng)過編碼(encode)后的字節(jié)組成的(
也正好印證了utf8編碼中一個中文字符是3個字節(jié))

Unicode才是真正意義上的字符串,由字符組成

再次回顧兩個函數(shù)用法

s = "中文"
# 這時是str,轉(zhuǎn)為unicode需要用decode
u = s.decode("utf-8")
print type(u)
# 打印 

# unicode轉(zhuǎn)為str ,使用encode
s2 = u.encode("utf-8")
print type(s2)
# 打印 

新結(jié)論:不同編碼轉(zhuǎn)換,使用Unicode作為中間編碼

#s是code_A的str
s.decode("code_A").encode("code_B")

在Python 3.x版本中,把"xxx"u"xxx"已經(jīng)都統(tǒng)一成Unicode編碼了,即寫不寫前綴u都是一樣的,而以字節(jié)形式表示的字符串則必須加上b前綴:b"xxx"

由于Python源代碼也是一個文本文件,所以,當(dāng)你的源代碼中包含中文的時候,在保存源代碼時,就需要務(wù)必指定保存為UTF-8編碼。當(dāng)Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
參考

字節(jié)、字、位、比特,這四者之間的關(guān)系
廖雪峰:python2.7教程之字符串和編碼
PYTHON-進階-編碼處理小結(jié)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38227.html

相關(guān)文章

  • 關(guān)于解決Python亂碼問題的終極解決方案 (TL;DR)

    摘要:關(guān)于解決亂碼問題的終極解決方案有個特別好玩的現(xiàn)象,當(dāng)我們?yōu)榱司幋a頭疼的時候,幾乎搜索到所有的文章都會先發(fā)一通牢騷。另外,關(guān)于的亂碼問題,又是一個新的較長篇章。 關(guān)于解決Python亂碼問題的終極解決方案 (TL;DR) showImg(https://segmentfault.com/img/remote/1460000013229494?w=809&h=184); 有個特別好玩的現(xiàn)象...

    Lemon_95 評論0 收藏0
  • 真的明白 new 了嗎

    摘要:如果構(gòu)造函數(shù)有返回值呢一般情況下構(gòu)造函數(shù)沒有返回值,但是我們依舊可以得到該對象的實例如果構(gòu)造函數(shù)有返回值,憑直覺來說情況應(yīng)該會不一樣。歡迎光臨小弟博客我的博客原文你真的弄明白了嗎參考再談面向?qū)ο缶幊痰膶嵗c繼承請停止使用關(guān)鍵字 好久沒有寫點東西了,總覺得自己應(yīng)該寫點牛逼的,卻又不知道如何下筆。既然如此,還是回歸最基本的吧,今天就來說一說這個new。關(guān)于javascript的new關(guān)鍵...

    tolerious 評論0 收藏0
  • 真的明白javascript中的原型和原型鏈了嗎

    摘要:補充的知識這個是原型中的自帶屬性,指向構(gòu)造函數(shù)這個屬性其實是瀏覽器實現(xiàn)的,不是標準的訪問原型的方式中規(guī)定的正式方法是以上知識,最終的圖如下思考題在文章開頭我們說過函數(shù)也是對象,既然是對象就有原型,那的原型指向誰呢是嗎 文章開頭說的話 首先你必須明白(或者記住)的JavaScript常識: 在JavaScript中每個函數(shù)都有一個prototype屬性 在JavaScript中每個對象...

    Harpsichord1207 評論0 收藏0
  • 前端閱讀筆記 2016-11-23

    摘要:今天閱讀量不大。工具目前還很初級,名為,可以在上找到,各方面都還有待改進,以支持更多方式。方才確定不是配置的原因。好了,廢話不說了,直接上閱讀筆記。方面,國內(nèi)基本僅此一人。請點擊閱讀原文查看更多,不止這三篇哦晚安 今天閱讀量不大。一則今天的文章確實不多,跟蹤的 30+ 博客更新不多。二則今天的主要精力在別的事情上。 首先,之前遇到過一些 CSS 精靈圖的問題。同樣的圖標,切下來的尺寸卻...

    wind5o 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<