2021-01-09 分類: 網(wǎng)站建設(shè)
在日常的前端開發(fā)工作中,我們會(huì)經(jīng)常的與HTML、javascript、css等語言打交道,和一門真正的語言一樣,計(jì)算機(jī)語言也有它的字母表、語法、詞法、編碼方式等,在這里我簡(jiǎn)單的談一下前端HTML與javascript日常工作中常碰到的編碼問題。
在計(jì)算機(jī)中,我們儲(chǔ)存的信息都是用二進(jìn)制碼表示的。我們認(rèn)識(shí)的、屏幕上顯示的英文、漢字等符號(hào)和儲(chǔ)存用的二進(jìn)制代碼的互相轉(zhuǎn)換,就是編碼。
有兩個(gè)基本概念需要說明,charset 和 character encoding:
charset ,字符集,也就是某個(gè)符號(hào)和某個(gè)數(shù)字映射關(guān)系的一個(gè)表,也就是它決定了107 是koubei 的 ‘a(chǎn)’,21475 是口碑的“口”,不同的表有不同的映射關(guān)系,如 ascii,gb2312,Unicode. 通過這個(gè)數(shù)字和字符的映射表,我們可以把一個(gè)二進(jìn)制表示的數(shù)字轉(zhuǎn)換成某個(gè)字符。
chracter encoding ,編碼方式。例如,同是對(duì)于應(yīng)“口”的 21475 這個(gè)數(shù),我們是用 \u5k3e3 表示呢,還是用 %E5%8F%A3 來表示呢?這就是由 character encoding 來決定的。
對(duì)于 ‘cdcxhl.com’ 這樣的 字符串來說,是美國(guó)人的常用字符,他們就制定了一個(gè) 叫做ASCII 的字符集,全稱是 american standard code of information interchange 美國(guó)標(biāo)準(zhǔn)信息交換碼,用0–127這128個(gè)數(shù)字,(2的7次方,0×00-0×7f) 代表了123abc這樣的常用的128個(gè)字符。一共是 7 bits,再加上第一個(gè)是符號(hào)位,要用來去補(bǔ)碼反碼表示負(fù)數(shù)什么的,一共8 bits 構(gòu)成一個(gè) byte。當(dāng)年美國(guó)人就是小氣了點(diǎn),要是一開始就設(shè)計(jì)成一個(gè) byte 是16 bits、32 bits,世界上會(huì)少很多問題,不過當(dāng)時(shí),估計(jì)他們覺得 8 bits 就夠了,可以表示128個(gè)不同的字符呢!
介于計(jì)算機(jī)這玩意兒是美國(guó)人搞出來的,所以他們自己省事,把自家用的符號(hào)都編碼好了,用的挺爽的。但當(dāng)計(jì)算機(jī)開始國(guó)際化的時(shí)候,問題出來了,拿中國(guó)舉例吧,漢字就好幾萬,怎么辦?
現(xiàn)有的 8 bits 一個(gè) byte 的系統(tǒng)是基礎(chǔ),不能破壞,不能去改到 16 bits之類的,否則改動(dòng)太大了,只能走另一條路:用多個(gè) ascii 的字符去表示一個(gè)其他字符,也就是 MBCS ( Multi-Byte Character System,多字節(jié)字符系統(tǒng))。
有了這個(gè) MBCS 的概念,我們可以表示更多個(gè)字符了,比如我們用 2 個(gè) ascii 字符,就有 16 bits, 理論上有 2 的 16 次方 65536 個(gè)字符。但這些編碼怎么分配到字符上呢?比如口碑的”口”的 Unicode 編碼就是 21475,誰決定的呢?字符集,也就是剛剛介紹的charset。ascii就是最基礎(chǔ)的一個(gè)字符集,在此之上,我們有類似于 gb2312, big5這樣針對(duì)簡(jiǎn)體中文和繁體中文的MBCS的字符集等等。終于有個(gè)叫 Unicode Consortium 的機(jī)構(gòu),決定做一個(gè)囊括所有字符在內(nèi)的字符集(UCS, Universal Character Set)和對(duì)應(yīng)編碼方式的標(biāo)準(zhǔn),即 Unicode。從1991年開始,它發(fā)布了第一版 Unicode 國(guó)際標(biāo)準(zhǔn),ISBN 0-321-18578-1 ,國(guó)際標(biāo)準(zhǔn)化組織 ISO 也參與了這個(gè)的定制,ISO/IEC 10646 : the Universal Character Set??傊?,Unicode 是個(gè)基本覆蓋了所有已經(jīng)存在的地球上的符號(hào)的字符標(biāo)準(zhǔn)了,現(xiàn)在正在被越來越廣泛的使用,ECMA 標(biāo)準(zhǔn)也規(guī)定,javascript語言的內(nèi)部字符使用 Unicode 標(biāo)準(zhǔn)(這意味著,javascript的變量名、函數(shù)名等是允許中文的!)。
對(duì)于身在中國(guó)的開發(fā)者來說,可能碰到比較多的問題就是 gbk, gb2312, utf-8 之間轉(zhuǎn)換之類的問題了。嚴(yán)格的說這個(gè)說法不是很準(zhǔn)確,gbk,gb2312是字符集 (charset),而 utf-8 是一種編碼方式 (character encoding) ,是 Unicode 標(biāo)準(zhǔn)中 UCS 字符集的一種編碼方式,因?yàn)槭褂?Unicode 字符集的網(wǎng)頁主要用UTF-8編碼,所以大家常常就把它們并列了,其實(shí)是不準(zhǔn)確的。
有了 Unicode 后,至少人類文明沒有碰到外星人之前,這是一把萬能鑰匙了,都用它吧。而現(xiàn)在使用最廣泛 Unicode 的編碼方式就是 UTF-8 (8-bit UCS/Unicode Transformation Format) 了,它有幾個(gè)特別好的地方:
編碼 UCS 字符集,全世界通用
是一種變長(zhǎng)編碼方式(variable-length character encoding),兼容 ascii
第二點(diǎn)是個(gè)很大的優(yōu)點(diǎn),它使得以前使用純 ascii 編碼的系統(tǒng)兼容,而且不會(huì)增加額外的存儲(chǔ)量(假設(shè)定長(zhǎng)的編碼方式,規(guī)定每個(gè)字符由2個(gè) bytes 組成,那么這時(shí)候 ascii 字符占用的存儲(chǔ)空間將增大一倍)。
新聞標(biāo)題:HTML與javascript中常用編碼淺析
轉(zhuǎn)載源于:http://jinyejixie.com/news/96537.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、App開發(fā)、域名注冊(cè)、響應(yīng)式網(wǎng)站、商城網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容