国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

每日 30 秒 ? 字符編碼排雷錄

mmy123456 / 1486人閱讀

簡(jiǎn)介
字符編碼、字符長(zhǎng)度錯(cuò)誤、截取字符錯(cuò)誤、UTF8、Unicode

計(jì)算機(jī)重重底層之下都是由 0 和 1 組合,但是你知道他們是怎么一步步變成字符串的嘛?在我們現(xiàn)實(shí)生活中最常見的例子可以通過 wo 在新華字典中找到 這個(gè)字。同樣計(jì)算機(jī)通過 0 和 1 組合在 字典 中查找到對(duì)應(yīng)的字符,那 字典 內(nèi)容是什么呢?

起源

計(jì)算機(jī)誕生于 美國(guó) 它的使用者大多數(shù)使用英文,美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì) 便制定了這本字典包括了 26個(gè)大寫英文字母26個(gè)小寫英文字母10個(gè)阿拉伯?dāng)?shù)字等總共 256 個(gè)字符的 ASCII 字符集。

混亂

ASCII 用二進(jìn)制來表示就是 0000 00001111 1111 被用得滿滿當(dāng)當(dāng),漢字就沒有地方可以放得下了這下怎么辦?正所謂江山大有人才出,國(guó)標(biāo)編碼 GB 系列出現(xiàn)了,其中最耳熟能詳?shù)木褪?GB2312

那么問題來了世界擁有 25003500 種語言,有文字的語言有 930 種。你能想象你在瀏覽不同語言界面的時(shí)候,需要自己不斷的去切換 字典 并且 每次切換查找不到的字符就會(huì)亂碼出現(xiàn)。

統(tǒng)一
書同文,車同軌,行同倫。

上面這句話歌頌了秦始王具有跨時(shí)代意義的成就,但是現(xiàn)實(shí)世界中統(tǒng)一語言顯得不可能。那我們能否換個(gè)思路解決這個(gè)問題呢?先思考一個(gè)問題:“把大象放入冰箱需要幾步”,答案大家都知道“打開,裝進(jìn)去,關(guān)上”。那統(tǒng)一字符怎么辦呢?那就是創(chuàng)建一個(gè)足夠大的字典把所有的字符都放進(jìn)去。

萬國(guó)碼

Unicode 萬國(guó)碼 轟隆一聲誕生了,顧名思義統(tǒng)一了全世界的所有文字編碼可以到 Unicode Consortium 和 codepoints 中查看,對(duì)應(yīng)的實(shí)現(xiàn)有UTF8、UTF16
、UTF-32。

可變長(zhǎng)度字符編碼

UTF8、UTF16、UTF-32最大區(qū)別在于對(duì)應(yīng)多少字節(jié)的數(shù)據(jù),越大能存儲(chǔ)的字符也就越多。其中 UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實(shí)現(xiàn)方式,也就是現(xiàn)在 html 中最常看到的 所聲明字符集。

UTF 最大的特點(diǎn)在于可變長(zhǎng)的字節(jié),例如 UTF8 可以是 1到4個(gè)字節(jié)來記錄 萬國(guó)碼,為什么這么設(shè)計(jì)呢?日常使用得到的字符對(duì)應(yīng)的字符編碼沒有必要占用這么多字節(jié),例如 0000 00000000 0000 0000 0000 都能表示 0,那使用更短的字節(jié)所占用的空間更小,傳輸?shù)乃俣雀臁?/p>

小插曲

在統(tǒng)一編碼的過程中還出現(xiàn)了一個(gè)字符集 UCS-2,它固定使用 2個(gè)字節(jié)來編碼 與 UTF 可變長(zhǎng)度字符編碼有一定程度上的不同,但是隨著統(tǒng)一進(jìn)程下被 UTF-16 收編了。

JavaScript 字符處理

了解字符基本原理和進(jìn)程后,那么 JavaScript 是什么編碼呢?沒錯(cuò)它就剛才 小插曲 中提到的 UCS-2,原因是 JavaScript 誕生時(shí) UTF-16 還沒有出現(xiàn)。

但是現(xiàn)在大家都在使用 UTF 可變長(zhǎng)度字符編碼UTF-16 的可變字節(jié)為 2個(gè)或者 4個(gè),而 UCS-2 卻只有 2個(gè)。這樣兩個(gè)字符集之間就有存在一個(gè) UCS-2 無法識(shí)別的 4字節(jié),JavaScript 在處理字符時(shí)會(huì)傻傻的按著 UCS-2 的兩字節(jié)去處理,再加上字典里沒有這個(gè)字符笨笨的小腦袋瓜無法處理只能輸出亂碼。

由于 emoji 表情的普及,而且 emoji 剛好就是處于 UCS-2字典之外,在前端開發(fā)中遇到可能出現(xiàn) emoji 的地方需要小心謹(jǐn)慎:

長(zhǎng)度
BUG 預(yù)警

現(xiàn)在最為常用的 emoji 表情為 4個(gè)字節(jié)編碼表示,由于 UCS-2 固定兩個(gè)字節(jié),在統(tǒng)計(jì)長(zhǎng)度時(shí) emoji 會(huì)被當(dāng)做兩個(gè) UCS-2 字符,結(jié)果會(huì)和我們預(yù)期的輸出大了一倍。

let emoji = "           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/102984.html

相關(guān)文章

  • 每日 30 ? URL 大爆炸

    showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/url/poster.png); 簡(jiǎn)介 URL結(jié)構(gòu)、組成、query、hash、axios數(shù)組傳遞錯(cuò)誤、HTTP 請(qǐng)求 伴隨著微信消息的提示音 小四 發(fā)來一段代碼說 不知道為什么請(qǐng)求不到頁(yè)面數(shù)據(jù): axios.get...

    W4n9Hu1 評(píng)論0 收藏0
  • 每日 30 ? 投懷送抱

    showImg(https://segmentfault.com/img/remote/1460000018808058?w=900&h=500); 簡(jiǎn)介 SEO、sitemap、搜索引擎優(yōu)化、簡(jiǎn)單教程 在曖昧期和暗戀期時(shí)心里總是懸掛著: ta 為什么還不和我表白? ta 是不是對(duì)我沒感覺? ta 是不是只是把我當(dāng)備胎? ta 是不是對(duì)誰都這樣? 解決問題最簡(jiǎn)單的方式就是直接 問問對(duì)方...

    kevin 評(píng)論0 收藏0
  • 每日 30 ? JSON對(duì)象數(shù)組轉(zhuǎn)換 CSV 表格數(shù)據(jù)

    簡(jiǎn)介 數(shù)組、對(duì)象、CSV、表格、工具 我們?cè)?每日 30 秒之 arrayToCSV 中一起學(xué)習(xí)了將數(shù)組數(shù)據(jù)轉(zhuǎn)化為 csv 表格數(shù)據(jù)并導(dǎo)出,那如果是對(duì)象數(shù)組怎么辦呢?小腦袋瓜轉(zhuǎn)得快的同學(xué)肯定會(huì)說:使用 Array.prototype.map 把需要導(dǎo)出的字段先遍歷取出,再使用 arrayToCSV 將其導(dǎo)出為 CSV 數(shù)據(jù)表格。 可是你有沒有想過如果一個(gè)對(duì)象數(shù)組數(shù)據(jù)非常之大時(shí),使用 Array.p...

    Ajian 評(píng)論0 收藏0
  • 每日 30 ? 終極等于

    簡(jiǎn)介 字符串、數(shù)字、數(shù)組、對(duì)象、時(shí)間、類型、等于 科學(xué)家發(fā)現(xiàn),人腦中會(huì)分泌多種能讓人感到快樂、安全和成就感的物質(zhì),這些物質(zhì)統(tǒng)稱為快樂素。通常情況下,快樂素的釋放水平很低,維持我們心情平靜。只有當(dāng)我們完成了預(yù)設(shè)目標(biāo),作為獎(jiǎng)勵(lì),大腦才會(huì)增加快樂素的分泌,讓人感受到滿足和成功的喜悅。 這是之前看到的一篇關(guān)于 大腦獎(jiǎng)勵(lì)機(jī)制 文章的一段話,為了要獲得獎(jiǎng)勵(lì)我們需要有預(yù)設(shè)目標(biāo),而是每日 30 秒系列也是為了幫助...

    lakeside 評(píng)論0 收藏0
  • 每日 30 ? 數(shù)組轉(zhuǎn)CSV表格數(shù)據(jù)

    showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡(jiǎn)介 數(shù)組、CSV、表格、工具 將一個(gè)數(shù)組轉(zhuǎn)化為逗號(hào)為分割符的字符串(CSV)即表格數(shù)據(jù)。 // 該源碼來自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...

    nanchen2251 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<