編碼

上周同事組內(nèi)分享了編碼相關(guān)的內(nèi)容。之前自己也總結(jié)過堂飞,但過了一段時(shí)間后發(fā)現(xiàn)記憶有點(diǎn)模糊。希望能從一個(gè)角度講好編碼這件事绑咱,理解型記憶绰筛。

編碼的理解

在計(jì)算機(jī)的世界中,只有0和1描融。0和1組成的2進(jìn)制能唯一對應(yīng)一個(gè)數(shù)字铝噩。因此我們所見的所有文字,所有符號窿克,要想在計(jì)算機(jī)中表現(xiàn)骏庸,只能先對應(yīng)到一個(gè)數(shù)字上。比如0表示a年叮,1表示b具被。你以為人類的文字很多,其實(shí)不然只损,漢字也就幾萬的規(guī)模而已硬猫。將所有人類日常用到的符號,全部給一個(gè)數(shù)字編號,然后將數(shù)字轉(zhuǎn)換成計(jì)算機(jī)的01啸蜜,編碼的過程也就完成了坑雅。
任何一個(gè)編碼系統(tǒng)都是如此,也只能如此衬横。這個(gè)過程中唯一能產(chǎn)生的區(qū)別就是符合對應(yīng)的數(shù)字可能不同裹粤。比如我0表示A, 你的0表示a蜂林。另外也可能我只表示英文字符遥诉,別的字符不包含,比如ascii碼噪叙,而有些包含漢字矮锈,不包含拉丁文。這些都是細(xì)枝末節(jié)的區(qū)別睁蕾。

來對漢字進(jìn)行編碼

如果要對漢字進(jìn)行編碼苞笨,首先是獲取到想要編碼的所有漢字,比如6萬個(gè)子眶。從0到6萬給個(gè)編號瀑凝,這6萬個(gè)漢字就已經(jīng)編碼好了。
剩下的問題不過是如何在計(jì)算機(jī)中進(jìn)行保存臭杰。畢竟編號最小的只需要占用1bit的空間粤咪,而編號最大的可能需要16bit空間(2^16=65536)。

不同編碼的區(qū)別

除了最開始說的最細(xì)枝末節(jié)的區(qū)別渴杆,不同編碼之間最大的區(qū)別在于寥枝,如果在計(jì)算機(jī)中表示相應(yīng)的數(shù)值。
比如上面提到的磁奖,要表示從0到6萬之間的所有數(shù)囊拜,如何在計(jì)算機(jī)中表示。最簡單的是点寥,每個(gè)數(shù)分配16bit的空間也就是2個(gè)字節(jié)來表示艾疟。沒有一點(diǎn)問題来吩。
但對于1個(gè)字節(jié)就能表示的數(shù)敢辩,另外一個(gè)字節(jié)就全是0,浪費(fèi)掉了弟疆。特別是要表示英文文獻(xiàn)時(shí)戚长,大部分都是ascii碼,一個(gè)字節(jié)就能搞定的事情怠苔,空間相當(dāng)于浪費(fèi)了一半同廉。
上面用兩個(gè)字節(jié)來表示成為固定長度表示。與之相對的就是變長表示法。對于一個(gè)字節(jié)能表示完的迫肖,我就用一個(gè)字節(jié)锅劝,萬不得已的時(shí)候,我用更多的直接來表示蟆湖。

unicode 編碼

Unicode編碼是一套規(guī)范故爵,規(guī)定的是數(shù)字和符號之間的對應(yīng)關(guān)系。
里面具體的編碼規(guī)則如utf-16, utf-8是遵循這套規(guī)范的隅津,且明確在計(jì)算機(jī)中保存這些數(shù)字的格式诬垂。
其中utf-16 是固定使用兩個(gè)字節(jié)的長度來表示。因此與ascii碼不兼容(當(dāng)需要表示的字符只是ASCII碼時(shí)伦仍,是否與ASCII 編碼后的二進(jìn)制一樣)--使用utf-16表示abc之后结窘,其二進(jìn)制使用ASCII規(guī)范解碼后為0a0b0c。
固定字節(jié)長度的編碼都很好實(shí)現(xiàn)充蓝,解碼工作也非常容易做隧枫。但問題有兩個(gè)

  1. 空間浪費(fèi)的問題。
  2. 解碼時(shí)不安全的問題棺克。如果因?yàn)槟承┰蛴贫猓z漏了一個(gè)字節(jié),則后面所有的解碼都將錯(cuò)誤娜谊。

utf-8是使用最多4字節(jié)的變長編碼确买。

  1. 與ASCII兼容。ASCII編碼是一個(gè)字節(jié)纱皆,且首尾為0湾趾。因此當(dāng)解碼時(shí),發(fā)現(xiàn)一個(gè)字節(jié)首位為0派草,當(dāng)成一個(gè)字節(jié)解讀搀缠。
  2. 在此基礎(chǔ)上,如果首位為1近迁, 則表明這次編碼一定不是一個(gè)字節(jié)艺普。可能是2鉴竭,3歧譬,4個(gè)字節(jié)三種情況。
  • 單字節(jié)字符的最高有效比特永遠(yuǎn)為0搏存。
  • 多字節(jié)序列中的首個(gè)字符組的幾個(gè)最高有效比特決定了序列的長度瑰步。最高有效位為110的是2字節(jié)序列,而1110的是三字節(jié)序列璧眠,如此類推缩焦。
  • 多字節(jié)序列中其余的字節(jié)中的首兩個(gè)最高有效比特為10读虏。
    按照編碼規(guī)則,utf-8可以支持最多8字節(jié)的字符(第一個(gè)字符最多能有8個(gè)1袁滥,不會帶來混淆)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盖桥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子题翻,更是在濱河造成了極大的恐慌葱轩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藐握,死亡現(xiàn)場離奇詭異靴拱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猾普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門袜炕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人初家,你說我怎么就攤上這事偎窘。” “怎么了溜在?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵陌知,是天一觀的道長。 經(jīng)常有香客問我掖肋,道長仆葡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任志笼,我火速辦了婚禮沿盅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纫溃。我一直安慰自己腰涧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布紊浩。 她就那樣靜靜地躺著窖铡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坊谁。 梳的紋絲不亂的頭發(fā)上费彼,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音呜袁,去河邊找鬼敌买。 笑死简珠,一個(gè)胖子當(dāng)著我的面吹牛阶界,可吹牛的內(nèi)容都是我干的虹钮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼膘融,長吁一口氣:“原來是場噩夢啊……” “哼芙粱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氧映,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤春畔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岛都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體律姨,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年臼疫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了择份。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烫堤,死狀恐怖荣赶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸽斟,我是刑警寧澤拔创,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站富蓄,受9級特大地震影響剩燥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜立倍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一躏吊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帐萎,春花似錦比伏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澈段,卻和暖如春悠菜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背败富。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工悔醋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兽叮。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓芬骄,卻偏偏與公主長得像猾愿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子账阻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 字符是用戶可以讀寫的最小單位淘太。計(jì)算機(jī)所能支持的字符組成的集合姻僧,就叫做字符集。字符集通常以二維表的形式存在蒲牧。二維表的...
    劉惜有閱讀 8,117評論 2 14
  • 編碼問題一直困擾著開發(fā)人員撇贺,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺語言冰抢,不同平臺之間編碼之間的切換...
    x360閱讀 2,480評論 1 20
  • 為什么要編碼 不知道大家有沒有想過一個(gè)問題显熏,那就是為什么要編碼?我們能不能不編碼晒屎?要回答這個(gè)問題必須要回到計(jì)算機(jī)是...
    艾小天兒閱讀 17,320評論 0 2
  • 字符集和編碼簡介 在編程中常炒。可以見到各種字符集和編碼,包括ASCII,MBCS,Unicode等字符集鼓鲁。確切的說...
    蘭山小亭閱讀 8,494評論 0 13
  • 《山中行》/劉素 山川之上藏香茗目锭, 一芽一葉山水間肆饶。 漫山遍野尋它渡贾漏, 只留杯香在人間...
    馬幫劉素閱讀 253評論 0 1