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

資訊專(zhuān)欄INFORMATION COLUMN

javascript基礎(chǔ)之字符集與編碼

sanyang / 3008人閱讀

摘要:一個(gè)中文字符好,在編號(hào)是,你把放到到字符集中,字符集就識(shí)別不出是好字了,會(huì)出現(xiàn)一些莫名奇妙的亂碼。我一判斷是否是中文驗(yàn)證漢字的正則表達(dá)式我們只是需要把中文的編號(hào)范圍圈出來(lái),然后判斷字符是否在此范圍內(nèi)即可。

本篇文章是本人純手寫(xiě),如有錯(cuò)誤或者論述不當(dāng),歡迎各位同行給予指出。

前言

我在看<的時(shí)候,給我們介紹了javascript的所使用的字符集是Unicode。于是我就開(kāi)始慢慢了解javaScript與Unicode

什么是Unicode?

按Unicode官方的說(shuō)法,Unicode是Unicode Standard(Unicode標(biāo)準(zhǔn))的簡(jiǎn)寫(xiě),所以Unicode即是指Unicode標(biāo)準(zhǔn)。
按wiki的說(shuō)法,它是一個(gè)計(jì)算機(jī)工業(yè)標(biāo)準(zhǔn)(a computing industry standard)。
所以我們先需要明白兩個(gè)概念,字符集編碼。

字符集

這里我重點(diǎn)推薦字符集與編碼這篇文章,對(duì)字符集說(shuō)的很詳細(xì)。如果還有不清楚"字符集"的小伙伴。我這里可以給小伙伴們形象的舉例說(shuō)明下。字符集可以類(lèi)比于我們的身份證系統(tǒng),我們每個(gè)人都是有一個(gè)身份證號(hào),字符集中的每一個(gè)展示的字符都有字符編號(hào)。比如你是張三,你的身份證號(hào)就是XXX1,你是王二,身份證號(hào)就是XXX2。你拿身份證在中國(guó)是能分辨出你是誰(shuí)。但是你去美國(guó),人家是不認(rèn)你的身份證,你需要有美國(guó)中相關(guān)證件,人家美國(guó)才能分辨你是誰(shuí),不然,你就被當(dāng)做非法移民。同理,在字符集中。一個(gè)中文字符"好",在Unicode編號(hào)是【597d】,你把【597d】放到到ASCII字符集中,ASCII字符集就識(shí)別不出是"好"字了,會(huì)出現(xiàn)一些莫名奇妙的亂碼。就會(huì)有很多不同的字符集。我們這些小伙伴們只要記住所謂字符集就是一個(gè)標(biāo)準(zhǔn),一個(gè)規(guī)范,但是不同的字符集中標(biāo)準(zhǔn)和規(guī)范是不一樣的。那字符集能用來(lái)干嘛呢? 主要是用來(lái)指導(dǎo)我們?cè)谟?jì)算機(jī)中去定位字符。既然定位字符,自然就會(huì)給每個(gè)字符定義一個(gè)編號(hào),編號(hào)肯定是唯一的,不用想,不然你一個(gè)編號(hào)去定位兩個(gè)或者多個(gè)字符,那計(jì)算機(jī)就無(wú)法判斷你所需要的字符是哪個(gè)。字符集中,如何定義那個(gè)字符的編號(hào),這事已經(jīng)不需要我們關(guān)心了。ASCII字符集、GBK字符集、Unicode字符集,都已經(jīng)有官方的組織幫我們定義好了,我們只管使用就行。當(dāng)然,世界上現(xiàn)在最通用的字符集就是Unicode啦

編碼

這里我重點(diǎn)推薦字符集與編碼(二)——編號(hào) vs 編碼這篇文章,對(duì)編號(hào)與編碼說(shuō)的很詳細(xì)。我總結(jié)一句話就是: 編碼就是對(duì)字符集中的編號(hào)進(jìn)行編碼

注意?。?!字符集中編號(hào)是固定的,但是對(duì)其中的編號(hào)進(jìn)行編碼方式是多種多樣的
拿我們常用的Unicode字符集舉例,就有UCS-2、UTF-8、UTF-16、UTF-32等多種編碼方式。

為了讓小伙伴們更好的了解編碼是什么,我這里做了一個(gè)小試驗(yàn)。
打開(kāi) Ultraedit,創(chuàng)建一個(gè)文件,名稱(chēng)叫做a.js。里面輸入一個(gè)字符"好"

里面的文件編碼方式是UTF-8,我們還可以通過(guò)查看16進(jìn)制查看該字符的存儲(chǔ)編碼是E5A5BD,表示三個(gè)字節(jié)。

可能有小伙伴覺(jué)很奇怪,UTF-8是屬于Unicode字符集么。那么保存的16進(jìn)制應(yīng)該就是597d,怎么變成了E5A5BD。
這里給這些小伙伴解答一下疑惑。我們需要明白UTF-8是一種編碼方式,它會(huì)按照一定的規(guī)則對(duì)Unicode中字符的編號(hào)進(jìn)行轉(zhuǎn)換,既然經(jīng)過(guò)轉(zhuǎn)化,就不可能存儲(chǔ)還是原始的字符的編號(hào)。我們?cè)谏厦婵吹降?6進(jìn)制。已經(jīng)是經(jīng)過(guò)UTF-8對(duì)這個(gè)字符的編號(hào)進(jìn)行轉(zhuǎn)換過(guò)后的內(nèi)容,不是它原始的編號(hào)【597d】。同樣的,當(dāng)我們用的電腦去讀取上面存儲(chǔ)的文本的(16進(jìn)制的E5A5BD),電腦也是需要一定的規(guī)則去把內(nèi)容轉(zhuǎn)化為Unicode的編號(hào)。
為了驗(yàn)證讀取也是需要規(guī)則的想法,我們把編碼變成UTF-16LE,我們?cè)倏次谋荆妥兂闪藖y碼

我們查看里面的16進(jìn)制內(nèi)容,依然是沒(méi)有發(fā)生變化

為什么變成了亂碼,因?yàn)榇鎯?chǔ)的規(guī)則(UTF-8)與讀取的規(guī)則不一樣(UTF-16LE),于是就導(dǎo)致了亂碼。但是讀取時(shí)候存儲(chǔ)的文件內(nèi)容是沒(méi)有變化的,還是E5A5BD。只是顯示給用戶看的時(shí)候,變成了亂碼。

在這里給小伙伴們saowie總結(jié)一下。 所謂編碼其實(shí)就是對(duì)字符集里面的編號(hào)進(jìn)行轉(zhuǎn)換的規(guī)則。像UTF-8有UTF-8的規(guī)則(PS: UTF-8轉(zhuǎn)Unicode的轉(zhuǎn)換規(guī)則網(wǎng)絡(luò)資料很多,自行百度、google,這里不再補(bǔ)充), UTF-16LE有UTF-16的規(guī)則,當(dāng)我們?cè)诒4婧妥x取文件時(shí)候,需要告訴我們的計(jì)算機(jī)是什么規(guī)則。好讓我們的計(jì)算機(jī)去通過(guò)相應(yīng)的規(guī)則去獲取對(duì)應(yīng)的字符。(PS:當(dāng)然現(xiàn)在很多軟件默認(rèn)編碼方式是UTF-8, 已經(jīng)給我們定義好了,不需要我們?nèi)ヌ匾飧木幋a)。

JavaScript與Unicode

現(xiàn)在大家對(duì)字符集合字符編碼應(yīng)該已經(jīng)不陌生了, 下面我們一起探討下,JavaScript與字符集的關(guān)系。
這里我們可以參考阮一峰的Unicode與JavaScript詳解,說(shuō)的很不錯(cuò)。
這里我給小伙伴們指出一下重點(diǎn): javaScript是使用Unicode字符集的,但它的編碼方式是UCS-2(歷史原因),并且UCS-2的編碼與Unicode的編號(hào)幾乎一樣。所以,我們可以在JS中直接使用轉(zhuǎn)義后Unicode的編號(hào)就能獲取對(duì)應(yīng)字符,比如u597d => 好。

最后,這里給小伙伴們補(bǔ)充幾個(gè)例子,用于加深理解。
A1. JS中獲取字符的幾種方式
A. 直接通過(guò)鍵盤(pán)輸入, 這個(gè)不多說(shuō)
B. Unicode轉(zhuǎn)義序列, javaScript中可以通過(guò)6位ASCII碼來(lái)表示一個(gè)Unicode編碼, 其中u是前綴,后面4位16進(jìn)制數(shù),也就是你想要字符的編號(hào)來(lái)獲取相應(yīng)的字符。

console.log("u597d")  // => 好
console.log("u6211")  // => 我 

C. 通過(guò)String.fromCharCode獲取字符, javaScript中給開(kāi)發(fā)人員提供了一個(gè)可以通過(guò)Unicode編號(hào)直接獲取字符的API。String.fromCharCode

String.fromCharCode(0x6211, 0x4e00) // => 我一

A2. 判斷是否是中文

// /^[u4e00-u9fa5]+$/ 驗(yàn)證漢字的正則表達(dá)式
function isAllChinese(str) {
    return /^[u4e00-u9fa5]+$/.test(str);
}
   我們只是需要把中文的Unicode編號(hào)范圍圈出來(lái),然后判斷字符是否在此范圍內(nèi)即可。

A3. javaScript獲取字符的Unicode編號(hào)

var str = "好好學(xué)習(xí)";
for (var i = 0, length = str.length; i < length; i++) {
  console.log(str.codePointAt(i).toString(16)) //=> 597d 597d 5b66 4e60 
}
文章中所用Unicode編號(hào)在其他文章中被稱(chēng)為碼點(diǎn),兩個(gè)所指都是同一個(gè)內(nèi)容,望小伙伴們不要誤解

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

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

相關(guān)文章

  • WebSocket系列字符串如何二進(jìn)制數(shù)據(jù)間進(jìn)行互相轉(zhuǎn)換

    摘要:總結(jié)通過(guò)使用和,我們能夠在數(shù)據(jù)和二進(jìn)制數(shù)據(jù)中進(jìn)行互相轉(zhuǎn)換。下一篇系列相關(guān)的博客,將會(huì)介紹如何通過(guò)來(lái)向后端傳遞二進(jìn)制數(shù)據(jù),以及如何處理通過(guò)收到的二進(jìn)制數(shù)據(jù)。 概述 上一篇博客我們說(shuō)到了如何進(jìn)行數(shù)字類(lèi)型(如Short、Int、Long類(lèi)型)如何在JavaScript中進(jìn)行二進(jìn)制轉(zhuǎn)換,如果感興趣的可以可以閱讀本系列第二篇博客——WebSocket系列之JavaScript中數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為...

    stackfing 評(píng)論0 收藏0
  • javascript基礎(chǔ)String

    摘要:寫(xiě)快一年了發(fā)現(xiàn)基礎(chǔ)越來(lái)越重要寫(xiě)點(diǎn)基礎(chǔ)的來(lái)共勉以及方便之后回看和不同,是構(gòu)造函數(shù)是變量的一種類(lèi)型是的實(shí)例聲明一個(gè)字符串之后使用是否包含判斷一個(gè)字符串是否被包含在另一個(gè)字符串中包含返回不包含返回查詢包含的字符串從什么位置開(kāi)始切割字符串獲取字符串 寫(xiě)js快一年了,發(fā)現(xiàn)基礎(chǔ)越來(lái)越重要,寫(xiě)點(diǎn)基礎(chǔ)的來(lái)共勉以及方便之后回看. String和string不同,String是構(gòu)造函數(shù),string是變量...

    springDevBird 評(píng)論0 收藏0
  • Unicode中UTF-8UTF-16編碼詳解

    摘要:概念是一種針對(duì)的可變長(zhǎng)度字符編碼,又稱(chēng)萬(wàn)國(guó)碼。通過(guò)上面的介紹我們可以知道,是一種非常通用的可變長(zhǎng)字符編碼方式。概念是字符編碼五層次模型的第三層字符編碼表,也稱(chēng)為的一種實(shí)現(xiàn)方式。 概述 本文通過(guò)介紹Unicode編碼以及對(duì)應(yīng)的兩種編碼方式UTF-8和UTF-16,讓讀者能夠了解關(guān)于字符串編碼的相關(guān)知識(shí),同時(shí)能夠弄清楚Unicode和UTF-8和UTF-16之間的關(guān)系。 本文的主要內(nèi)容為:...

    cod7ce 評(píng)論0 收藏0
  • Node閑談Buffer

    摘要:閑談系列不涉及具體的講解,只會(huì)勾勾畫(huà)畫(huà)一些自己認(rèn)為比較重要的特性。我們一般認(rèn)為用兩個(gè)字節(jié)位表示,并且完全囊括了字符集。將其轉(zhuǎn)換成進(jìn)制就是只是表示它們是碼。三的讀取和寫(xiě)入相關(guān)重要的只有能夠讀寫(xiě),才能夠顯示其存在的價(jià)值。 原文地址:http://www.cnblogs.com/DeanCh... 在剛接觸Nodejs的時(shí)候,有些概念總讓學(xué)前端的我感到困惑(雖然大學(xué)的時(shí)候也是在搞后端,世界上...

    Godtoy 評(píng)論0 收藏0
  • JavaScript 闖關(guān)記》單體內(nèi)置對(duì)象

    摘要:?jiǎn)误w內(nèi)置對(duì)象對(duì)內(nèi)置對(duì)象的定義是由實(shí)現(xiàn)提供的不依賴于宿主環(huán)境的對(duì)象,這些對(duì)象在程序執(zhí)行之前就已經(jīng)存在了。還定義了兩個(gè)單體內(nèi)置對(duì)象和。此外,所有原生引用類(lèi)型的構(gòu)造函數(shù),像和,也都是對(duì)象的屬性。 單體內(nèi)置對(duì)象 ECMA-262 對(duì)內(nèi)置對(duì)象的定義是「由 JavaScript 實(shí)現(xiàn)提供的、不依賴于宿主環(huán)境的對(duì)象,這些對(duì)象在 JavaScript 程序執(zhí)行之前就已經(jīng)存在了」。意思就是說(shuō),開(kāi)發(fā)人員不...

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

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

0條評(píng)論

閱讀需要支付1元查看
<