JavaScript字符集編碼與解碼詳談
一、字符集
1)字符與字節(jié)(Character)
字符是各種文字和符號(hào)的總稱,包括亂碼;一個(gè)字符對(duì)應(yīng)1~n個(gè)字節(jié),一字節(jié)對(duì)應(yīng)8位,每位用0或1表示。
2)字符集(Character Set)
字符集是多個(gè)字符的集合,每個(gè)字符集包含的字符個(gè)數(shù)不同,常見字符集名稱:ASCII字符集、GB2312字符集、Unicode字符集等。
3)字符集編碼(Character Encoding)
字符集編碼就是將符號(hào)轉(zhuǎn)換為計(jì)算機(jī)可讀的二進(jìn)制,解碼就是把二進(jìn)制轉(zhuǎn)換為人類可讀的符號(hào)。
字符集大多對(duì)應(yīng)一種編碼方式(例如GBK對(duì)應(yīng)GBK編碼),但Unicode編碼有多種,包括UTF-8、UTF-16、UTF-32和UTF-7。
目前網(wǎng)頁(yè)用的最多的就是“UTF-8”,UTF-8使用一至四個(gè)字節(jié)為每個(gè)字符編碼,是ASCII的一個(gè)超集,所以現(xiàn)存的ASCII文本不需要轉(zhuǎn)換
二、瀏覽器進(jìn)制
1)HTML屬性中使用十進(jìn)制和十六進(jìn)制
十進(jìn)制在HTML中可使用“8”,十六進(jìn)制,則使用“Z”,比十進(jìn)制多了個(gè)x,進(jìn)制碼中也多了a~f這6個(gè)字符來(lái)表示10~15。
2)CSS屬性中使用十進(jìn)制和十六進(jìn)制
CSS兼容HTML的進(jìn)制形式,除此之外,十六進(jìn)制還可以使用“\6c”的形式來(lái)表示。
3)JavaScript編碼封裝
可以直接通過(guò)eval執(zhí)行字符串八進(jìn)制和十六進(jìn)制兩種編碼方式,其中八進(jìn)制用“\56”表示,十六進(jìn)制用“\x5c”表示。
如果代碼中應(yīng)用了漢字并且需要進(jìn)行進(jìn)制編碼,那么只能進(jìn)行十六進(jìn)制Unicode編碼,其表示形式為:“\u4ee3\u7801”。
在“Web前端黑客技術(shù)揭秘”中經(jīng)封裝了兩個(gè)方法來(lái)做編碼和解碼,主要用到了下面兩個(gè)方法,具體代碼可查看此處。
核心代碼是:“str.charCodeAt(char).toString(進(jìn)制)”與“String.fromCharCode(parseInt(code,進(jìn)制))”
charCodeAt() 方法返回0到65535之間的整數(shù),表示給定索引處的UTF-16代碼單元
靜態(tài)String.fromCharCode() 方法返回使用指定的Unicode值序列創(chuàng)建的字符串。
還可以通過(guò)一個(gè)在線網(wǎng)頁(yè)進(jìn)行編碼解碼“MonyerJS”。
4)HTML自動(dòng)解碼機(jī)制
例如在網(wǎng)頁(yè)中輸入16進(jìn)制的“Hello”,自動(dòng)就會(huì)解碼為“hello”。
還有一些比較熟知的空格“ ”也是這種機(jī)制。
三、瀏覽器編碼
JavaScript中有三對(duì)可以對(duì)字符串編碼解碼的函數(shù),分別是:
escape/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent。
主要的區(qū)別還是不編碼的字符個(gè)數(shù)。
1)escape不編碼的字符有69個(gè)
*、+、-、.、/、@、_、0~9、a~z、A~Z
而且escape對(duì)0~255以外的unicode值進(jìn)行編碼時(shí)輸出%u****格式。
2)encodeURI不編碼的字符有82個(gè)
!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~Z
3)encodeURIComponent不編碼的字符有71個(gè)
!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z
相關(guān)文章
用JavaScript實(shí)現(xiàn)對(duì)話框的教程
這篇文章主要介紹了用JavaScript實(shí)現(xiàn)對(duì)話框的教程,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06javascript創(chuàng)建對(duì)象、對(duì)象繼承的實(shí)用方式詳解
JavaScript中的對(duì)象是基于原型的。原型是對(duì)象的基礎(chǔ),它定義并實(shí)現(xiàn)了一個(gè)新對(duì)象所必須包含的成員列表,并被所有同類對(duì)象實(shí)例所共享。與其他語(yǔ)言中類的概念相比,原型更像是類的靜態(tài)成員。本文著重給大家介紹javascript創(chuàng)建對(duì)象、對(duì)象繼承的實(shí)用方式2016-03-03js nextSibling屬性和previousSibling屬性概述及使用注意
nextSibling屬性:該屬性表示當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn);如果其后沒有與其同級(jí)的節(jié)點(diǎn),則返回null;previousSibling屬性:該屬性與nextSibling屬性的作用正好相反,接下來(lái)將詳細(xì)介紹下,感興趣的你不妨了解下哦,或許對(duì)你有所幫助2013-02-02在JavaScript的正則表達(dá)式中使用exec()方法
這篇文章主要介紹了在JavaScript的正則表達(dá)式中使用exec()方法,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06Javascript基礎(chǔ)教程之if條件語(yǔ)句
這篇文章主要介紹了Javascript基礎(chǔ)教程之if條件語(yǔ)句,需要的朋友可以參考下2015-01-01簡(jiǎn)易js代碼實(shí)現(xiàn)計(jì)算器操作
正在學(xué)習(xí)javascript的朋友們,可以把這個(gè)小練習(xí)做一做,加強(qiáng)自己編寫代碼的能力2013-04-04