計(jì)算機(jī)如何將一堆 0 和 1 顯示成人類可讀文字?看完秒懂
編碼初始印象
我們在電腦上常見的字符,其本質(zhì)都是由一連串的0和1所構(gòu)成。這就像我們過去寫信,必須遵循大家都能理解的文字規(guī)則一樣,電腦處理字符轉(zhuǎn)換也需要一套既定的映射規(guī)則。比如ASCII,它是最基礎(chǔ)的,操作簡便,應(yīng)用廣泛。
計(jì)算機(jī)剛開始普及的時(shí)候,ASCII 編碼就已經(jīng)出現(xiàn)了。這個(gè)編碼最初是為英語量身打造的,僅包含256個(gè)字符,只需一個(gè)字節(jié)就能輕松存儲(chǔ)。在當(dāng)時(shí)的英語使用環(huán)境中,無論是辦公還是記錄信息,都非常適用。許多文檔和代碼都采用了這種編碼方式,極大地促進(jìn)了計(jì)算機(jī)技術(shù)的進(jìn)步。
編碼擴(kuò)展難題
隨著計(jì)算機(jī)在全球范圍內(nèi)的廣泛應(yīng)用,非英語國家的用戶也開始廣泛采用。電腦上需要展示各種語言,這就引發(fā)了問題。各個(gè)國家的語言文字種類繁多,原有的ASCII碼256個(gè)字符根本無法滿足需求,因此出現(xiàn)了各種擴(kuò)展字符集。當(dāng)擴(kuò)展集的字符數(shù)量超過256后,一個(gè)字節(jié)就無法表示了,不得不使用兩個(gè)字節(jié)來表示一個(gè)字符。
在亞洲眾多國家,廣泛使用漢字、韓文、日文等字符。若僅用一個(gè)字節(jié)存儲(chǔ),顯然不夠。若按數(shù)字順序排列,系統(tǒng)在讀取時(shí)難以區(qū)分單個(gè)字符還是兩個(gè)字符,從而產(chǎn)生亂碼。這種情況給跨語言交流及計(jì)算機(jī)信息處理帶來了極大的困難。
編碼規(guī)則確定
要解決這個(gè)問題,必須確立編碼標(biāo)準(zhǔn)。確立規(guī)范后,系統(tǒng)便能明確每個(gè)編碼的具體意義。比如,規(guī)定0x81不是單獨(dú)的字節(jié)構(gòu)成字符,系統(tǒng)便會(huì)額外讀取一個(gè)字節(jié),然后根據(jù)碼表找到相應(yīng)的字符。
這就如同制定交通法規(guī),若繁忙的街道上缺乏秩序,必定會(huì)陷入混亂。一旦確立了編碼規(guī)范,計(jì)算機(jī)便能精確地識(shí)別和展示各類字符。遵循這些規(guī)則,各國語言文字的信息便能在電腦上精確無誤地展示和處理。
基本多語言平面
在編碼體系里,基本多語言平面(BMP)扮演著重要角色。它包括了從0000到ffff的所有碼點(diǎn),這個(gè)范圍是我們?nèi)粘J褂弥凶铑l繁的。絕大多數(shù)我們使用的各種語言的字符都集中在這個(gè)平面之中。
在日常生活中,無論是瀏覽網(wǎng)頁還是手機(jī)聊天,我們接觸到的字符大多源自BMP格式。除了BMP,還有每65536個(gè)點(diǎn)構(gòu)成一個(gè)平面,總共有17個(gè)這樣的平面。但這些平面中存儲(chǔ)的字符多是一些不常用的生僻字和特殊符號(hào)。
不同編碼方式
Unicode編碼轉(zhuǎn)換成UTF-8有特定的步驟,那就是將碼點(diǎn)劃分為四個(gè)部分,并使用不同的編碼方法。比如,0000到007F這部分對應(yīng)的是標(biāo)準(zhǔn)ASCII,只用一個(gè)字節(jié)就能表示;而10000到10FFFF這部分則需要拆分成四份,每份用四個(gè)字節(jié)來編碼。通過這樣的編碼方式,可以適應(yīng)各種字符,滿足各種使用需求。
UTF-16編碼將所有字符固定在16位,這意味著它能表示最多65536個(gè)字符,涵蓋了BMP區(qū)域。盡管UTF-16有其優(yōu)點(diǎn),但它存在一個(gè)顯著的缺點(diǎn),那就是它不能兼容最初的ASCII編碼。因此,在電腦系統(tǒng)中,它對基礎(chǔ)ASCII字符的識(shí)別并不友好。
html
UTF - 16 細(xì)說
UTF-16編碼中存在代理對這一特性,這是因?yàn)閁nicode編碼范圍超出了FFFF,往上延伸時(shí)無法確保每個(gè)字符都能用兩個(gè)字節(jié)表示,所以需要按照特定規(guī)則轉(zhuǎn)換為四個(gè)字節(jié)。這樣的設(shè)計(jì)使得UTF-16的編碼過程相對復(fù)雜,但同時(shí)也能夠處理更多字符的編碼需求。
它雖非常見文件編碼,但在 JavaScript 中卻至關(guān)重要。其字符串在內(nèi)存中是以 UTF-16 編碼形式存在的。對于學(xué)習(xí)編程,尤其是前端開發(fā),這部分知識(shí)不可或缺。掌握了它,才能更有效地處理字符串和展示各類文本信息。你是否對 UTF-16 有更深的理解了?不妨給這篇文章點(diǎn)贊,分享給需要的朋友,并在評論區(qū)談?wù)勀銓﹄娔X字符編碼的看法,以及在使用過程中是否遇到過編碼難題。
作者:小藍(lán)
鏈接:http://www.tymcc.com.cn/content/7977.html
本站部分內(nèi)容和圖片來源網(wǎng)絡(luò),不代表本站觀點(diǎn),如有侵權(quán),可聯(lián)系我方刪除。