亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

darcrand / 2174人閱讀

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

計(jì)算機(jī)存儲(chǔ)的幾個(gè)概念

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

bit

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

Byte

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

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

字長(zhǎng)

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

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

常見(jiàn)的編碼

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

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

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

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

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

Python編碼

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

兩個(gè)函數(shù)

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

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

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

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

一個(gè)栗子
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中定義的一個(gè)str變量實(shí)則是字節(jié)串,由Unicode經(jīng)過(guò)編碼(encode)后的字節(jié)組成的(
也正好印證了utf8編碼中一個(gè)中文字符是3個(gè)字節(jié))

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

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

s = "中文"
# 這時(shí)是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編碼了,即寫(xiě)不寫(xiě)前綴u都是一樣的,而以字節(jié)形式表示的字符串則必須加上b前綴:b"xxx"。

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/38227.html

相關(guān)文章

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

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

    Lemon_95 評(píng)論0 收藏0
  • 真的明白 new 了嗎

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

    tolerious 評(píng)論0 收藏0
  • 真的明白javascript中的原型和原型鏈了嗎

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

    Harpsichord1207 評(píng)論0 收藏0
  • 前端閱讀筆記 2016-11-23

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

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<