前端也需要了解的字符發(fā)展歷史

字節(jié)

  • 計算機(jī)內(nèi)部,所有信息最終都是一個二進(jìn)制值
  • 每一個二進(jìn)制位(bit)有0和1兩種狀態(tài),因此八個二進(jìn)制位就可以組合出256種狀態(tài)欺栗,這被稱為一個字節(jié)(byte)
image

單位

  • 8位 = 1字節(jié)
  • 1024字節(jié) = 1K
  • 1024K = 1M
  • 1024M = 1G
  • 1024G = 1T

JavaScript中的進(jìn)制

1. JavaScript中的進(jìn)制表示

如果想得到20的值,使用各種進(jìn)制是如何表示的

let a = 0b10100;//二進(jìn)制(0b表示的是二進(jìn)制,后面為值)
let b = 0o24;//八進(jìn)制(0o表示的是八進(jìn)制虑瀑,后面為值)
let c = 20;//十進(jìn)制
let d = 0x14;//十六進(jìn)制(0x表示的是十六進(jìn)制,后面為值)
console.log(a );//20
console.log(b);//20
console.log(c);//20
console.log(d);//20
2. JavaScript中的進(jìn)制轉(zhuǎn)換
  • 10進(jìn)制轉(zhuǎn)任意進(jìn)制 10進(jìn)制數(shù).toString(目標(biāo)進(jìn)制)
let c = 20;
//10進(jìn)制轉(zhuǎn)為二進(jìn)制
console.log(c.toString(2));//10100
//10進(jìn)制轉(zhuǎn)為八進(jìn)制
console.log(c.toString(8));//24
//10進(jìn)制轉(zhuǎn)為十六進(jìn)制
console.log(c.toString(16));//14
  • 任意進(jìn)制轉(zhuǎn)十進(jìn)制 parseInt('任意進(jìn)制字符串', 原始進(jìn)制)
console.log(parseInt('10100', 2));//20

ASCII

最開始計算機(jī)只在美國用滴须,八位的字節(jié)可以組合出256種不同狀態(tài)舌狗。0-32種狀態(tài)規(guī)定了特殊用途,一旦終端、打印機(jī)遇上約定好的這些字節(jié)被傳過來時扔水,就要做一些約定的動作痛侍,如:

  • 遇上0×10, 終端就換行;
  • 遇上0×07, 終端就向人們嘟嘟叫;

又把所有的空格主届、標(biāo)點符號赵哲、數(shù)字、大小寫字母分別用連續(xù)的字節(jié)狀態(tài)表示君丁,一直編到了第 127 號枫夺,這樣計算機(jī)就可以用不同字節(jié)來存儲英語的文字了
這128個符號(包括32個不能打印出來的控制符號),只占用了一個字節(jié)的后面7位绘闷,最前面的一位統(tǒng)一規(guī)定為0

image

這個方案叫做 ASCII 編碼
American Standard Code for Information Interchange:美國信息互換標(biāo)準(zhǔn)代碼

GB2312

后來西歐一些國家用的不是英文橡庞,它們的字母在ASCII里沒有為了可以保存他們的文字,他們使用127號這后的空位來保存新的字母印蔗,一直編到了最后一位255扒最。比如法語中的é的編碼為130。當(dāng)然了不同國家表示的符號也不一樣华嘹,比如吧趣,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel (?)除呵。
中國為了表示漢字再菊,把127號之后的符號取消了,規(guī)定

  • 一個小于127的字符的意義與原來相同颜曾,但兩個大于 127 的字符連在一起時纠拔,就表示一個漢字;
  • 前面的一個字節(jié)(他稱之為高字節(jié))從0xA1用到0xF7泛豪,后面一個字節(jié)(低字節(jié))從 0xA1 到 0xFE稠诲;
  • 這樣我們就可以組合出大約7000多個(247-161)*(254-161)=(7998)簡體漢字了。
  • 還把數(shù)學(xué)符號诡曙、日文假名和ASCII里原來就有的數(shù)字臀叙、標(biāo)點和字母都重新編成兩個字長的編碼。這就是全角字符价卤,127以下那些就叫半角字符劝萤。

把這種漢字方案叫做 GB2312。GB2312 是對 ASCII 的中文擴(kuò)展慎璧。
GB表示國標(biāo)的意思床嫌。

GBK

后來還是不夠用,于是干脆不再要求低字節(jié)一定是 127 號之后的內(nèi)碼胸私,只要第一個字節(jié)是大于 127 就固定表示這是一個漢字的開始,又增加了近 20000 個新的漢字(包括繁體字)和符號厌处。

GB18030 / DBCS

又加了幾千個新的少數(shù)民族的字,GBK擴(kuò)成了GB18030 通稱他們叫做 DBCS
Double Byte Character Set:雙字節(jié)字符集岁疼。
在 DBCS 系列標(biāo)準(zhǔn)里阔涉,最大的特點是兩字節(jié)長的漢字字符和一字節(jié)長的英文字符并存于同一套編碼方案里
各個國家都像中國這樣搞出一套自己的編碼標(biāo)準(zhǔn),結(jié)果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼

Unicode

現(xiàn)在來到了最重要的編碼方案

ISO 的國際組織廢了所有的地區(qū)性編碼方案瑰排,重新搞一個包括了地球上所有文化贯要、所有字母和符 的編碼! Unicode 當(dāng)然是一個很大的集合凶伙,現(xiàn)在的規(guī)墓希可以容納100多萬個符號函荣。
ISO 就直接規(guī)定必須用兩個字節(jié),也就是 16 位來統(tǒng)一表示所有的字符傻挂,對于 ASCII 里的那些 半角字符挖息,Unicode 保持其原編碼不變,只是將其長度由原來的 8 位擴(kuò)展為16 位绪抛,而其他文化和語言的字符則全部重新統(tǒng)一編碼电禀。
從 Unicode 開始,無論是半角的英文字母尖飞,還是全角的漢字政基,它們都是統(tǒng)一的一個字符!同時沮明,也都是統(tǒng)一的兩個字節(jié)

UTF-8

Unicode 在很長一段時間內(nèi)無法推廣,直到互聯(lián)網(wǎng)的出現(xiàn)酱畅,為解決 Unicode 如何在網(wǎng)絡(luò)上傳輸?shù)膯栴}摧扇,于是面向傳輸?shù)谋姸?UTF 標(biāo)準(zhǔn)出現(xiàn)了

  • UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實現(xiàn)方式
  • UTF-8就是每次以8個位為單位傳輸數(shù)據(jù)
  • 而UTF-16就是每次 16 個位
  • UTF-8 最大的一個特點,就是它是一種變長的編碼方式
  • Unicode 一個中文字符占 2 個字節(jié)吁峻,而 UTF-8 一個中文字符占 3 個字節(jié)
  • UTF-8 是 Unicode 的實現(xiàn)方式之一

編碼規(guī)則

  1. 對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0用含,后面7位為這個符號的 Unicode 碼。因此對于英語字母痴鳄,UTF-8 編碼和 ASCII 碼是相同的缸夹。
  2. 對于n字節(jié)的符號(n > 1),第一個字節(jié)的前n位都設(shè)為1橡类,第n+ 1位設(shè)為0芽唇,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位匆笤,全部為這個符號的 Unicode 碼炮捧。

Unicode符號范圍 | UTF-8編碼方式
(十六進(jìn)制) | (二進(jìn)制)
----------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

function transfer(num) {
  let ary = ['1110', '10', '10'];
  let binary = num.toString(2);
  ary[2] = ary[2]+binary.slice(binary.length-6);
  ary[1] = ary[1]+binary.slice(binary.length-12,binary.length-6);
  ary[0] = ary[0]+binary.slice(0,binary.length-12).padStart(4,'0');
  let result =  ary.join('');
  return parseInt(result,2).toString(16);
}
//萬
let result = transfer(0x4E07);//E4B887
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寓盗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傀蚌,更是在濱河造成了極大的恐慌,老刑警劉巖撩幽,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箩艺,死亡現(xiàn)場離奇詭異艺谆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)静汤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藤抡,“玉大人缠黍,你說我怎么就攤上這事〈墒剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵盛垦,是天一觀的道長。 經(jīng)常有香客問我颊埃,道長,這世上最難降的妖魔是什么饥漫? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任庸队,我火速辦了婚禮闯割,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宙拉。我一直安慰自己谢澈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布牛郑。 她就那樣靜靜地躺著敬鬓,像睡著了一般笙各。 火紅的嫁衣襯著肌膚如雪瑞你。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音虏缸,去河邊找鬼。 笑死窥岩,一個胖子當(dāng)著我的面吹牛宰缤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朦乏,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼呻疹,長吁一口氣:“原來是場噩夢啊……” “哼筹陵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起并思,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纺荧,失蹤者是張志新(化名)和其女友劉穎颅筋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占贫,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡型奥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年厢汹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烫葬。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡垢箕,死狀恐怖兑巾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帅掘,我是刑警寧澤锄开,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站寓免,受9級特大地震影響计维,放射性物質(zhì)發(fā)生泄漏鲫惶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赏淌。 院中可真熱鬧六水,春花似錦辣卒、人聲如沸荣茫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泞边。三九已至,卻和暖如春蚕礼,著一層夾襖步出監(jiān)牢的瞬間梢什,已是汗流浹背嗡午。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人满哪。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坟桅,于是被迫代替她去往敵國和親仅乓。 傳聞我的和親對象是個殘疾皇子宾抓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

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