日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript開發中需要搞懂的字符編碼總結

瀏覽:233日期:2022-06-01 10:14:22
目錄
  • 字符集和字符編碼
  • ASCII
  • 字符集的發展歷史
  • Unicode
    • UTF-8
    • UTF-16
    • 比較
  • 前端開發中的編碼
    • 字符串長度計算
    • 組合字符的長度
    • 多碼元字符操作
    • 正則中的 u 修飾符
    • 轉義字符
  • 常用API
    • 處理碼點和字符
    • TextEncoder
    • String.prototype.normalize()
    • URL的UTF8編解碼

字符集和字符編碼

字符集就是字符的集合,如常見的 ASCII字符集,GB2312字符集,Unicode字符集等。這些不同字符集之間最大的區別是所包含的字符數量的不同。

字符編碼則代表字符集的實際編碼規則,是用于計算機解析字符的,如 GB2312,GBK,UTF-8 等。字符編碼的本質就是如何使用二進制字節來表示字符的問題。

字符集和編碼是一對多的關系,同一字符集可能有多種字符編碼,如Unicode字符集就有 UTF-8,UTF-16 等。

在前端開發中,Javascript程序是使用Unicode字符集,Javascript源碼文本通常是基于UTF-8編碼。
但JS代碼中的字符串類型是UTF-16編碼的,這也是為什么會碰到api接口返回字符串在前端出現亂碼,因為多數后臺服務都使用utf-8編碼,前后編碼方式不一致。

說起字符集的發展歷程,可以總結為一句話:幾乎都是對ASCII字符集的擴展。

ASCII

我們知道,計算機是使用二進制來處理信息的。
其中,每一個二進制位(bit)有 0和1 兩種狀態。一個字節(byte)則有8個二進制位,可以有256種狀態。

而ASCII就是基于拉丁字母、主要用于顯示英文的一種單字節字符集,它的編碼和字符是一一對應的,因為它就是使用一個字節8個二進制位來表示,不會超過256個字符。

標準的ASCII字符總計有128個字符(2^7),其中前面32個控制字符,后面96個是可打印字符,包括常用的大小寫字母數字標點符號等。因為只占用了一個字節的后7位,那字節的最高位一般設置為0。

"a".charCodeAt() // 97
"A".charCodeAt() // 65
"9".charCodeAt() // 57
".".charCodeAt() // 46

如上,每個字符會對應一個編碼(使用數字標識),總共會從0-128。完整的ASCII碼表,網上很容易找到。

通過ASCII碼表,我們發現,小寫字母并沒有和大寫字母挨著排序?
這是為了方便大小寫之間的轉換, A 排在 65(64 + 1) 位,而 a 排在 97(64 + 32 + 1) 位。

65 ^ 32 = 97
// A ^ 32 = a

字符集的發展歷史

ASCII是幾乎所有字符集的基礎。

標準的ASCII碼最多只能標識128個字符,歐美國家可以很好的使用,但其他國家的字符變多,自然就不夠用了。

這個時候,最高位就開始被惦記上,通過擴展ASCII碼的最高位,又能滿足用于特殊符號的一些國家的需求,這種就是擴展ASCII碼。

但是亞非拉更多非拉丁語系的國家,字符成千上萬,只能使用新的方式。

如中文,就又進行了擴展,小于127的字符的意義與標準ASCII碼相同,當需要標識漢字時,使用2個字節,每個字節都大于127。這種多字節字符集即GB2312,后續因為不斷的擴展,如繁體字和各種符號,甚至少數民族的語言符號等等,又使用了包括GBK等不同字符集。

因此,很多國家都制定了自己的編碼字符集,基本都是在ASCII的基礎上進行的。

各字符集雖然都能夠兼容標準ASCII碼,但在使用交流上的不便是顯而易見的,亂碼也是隨處可見。為了解決這種各自為戰的問題,Unicode字符集就誕生了。

Unicode

Unicode是國際組織制定的,用于收納世界上所有文字和符號的字符集方案。

前128個字符同ASCII一樣,進行擴充后,使用數字0-0x10FFFF來映射這些字符,最多可以有1114112個字符。目前仍然只使用了其中的一小部分。
Unicode一般使用兩個字節來表示一個字符。

碼點

  • Unicode 規定了每個字符的數字編號,這個編號被稱為 碼點(code point)
  • 碼點以 U+hex 的形式表示,U+是代表Unicode的前綴,而 hex 是一個16進制數。取值范圍是從 U+0000 到 U+10FFFF。
  • 每個碼點對應一個字符,絕大部分的常見字符在最前面的 65536 個字符,范圍是 U+0000到U+FFFF。
  • 一般漢字的碼點區間為 U+2E80 - U+9FFF。

字符平面

  • 目前的Unicode分成了17個編組,也稱平面,每個平面有65536個碼點。
  • 第一個平面是基本多語言平面,范圍:U+0000 - U+FFFF,多數常見字符都在該區間。
  • 其他平面則為輔助平面,范圍:U+10000 到 U+10FFFF,如我們在網上常見 Emoji 表情。

碼元

  • 碼元(Code Unit)可以理解為對碼點進行編碼時的最小基本單元,碼元是一個整體。而字符編碼的作用就是將Unicode碼點轉換成碼元序列。
  • Unicode常用的編碼方式有 UTF-8 、UTF-16 和 UTF-32,UTF是Unicode TransferFormat的縮寫。
  • UTF-8是8位的單字節碼元,UTF-16是16位的雙字節碼元,UTF-32是32位的四字節碼元。
編碼方式碼元編碼后字節數UTF-88位1-4字節UTF-1616位2字節或者4字節UTF-3232位4字節

另外,為什么總看到使用十六進制數據來表示如碼點等各種數據呢?

因為,兩位的十六進制正好等于一個字節8位,0xff = 0b11111111。

UTF-8

UTF-8是一種可變長度的字符編碼方式。目前是使用 1 到 4 個字節來編碼字符。

是互聯網時代應用最廣的一種編碼方式,前端接觸的相對最多。

需要注意的是:漢字一般占3個字節,表情符號一般占4個字節。

UTF-8的編碼規則:

  • 1個字節的字符,第一位為0,后7位為碼點,與ASCII相同。
  • n個字節的字符,第一個字節前面 n 位都是1,n+1位是0,可據此判斷有幾個字節。后面的幾個字節都是 10 為開頭2位。

這里規定的都是前綴,對于字符的碼點,需要進行截取后依次放入除前綴外的其他位,所以UTF-8又被稱為前綴碼。

格式如下表:

字節數碼點位數碼點范圍編碼方式17U+0000~U+007F0×××××××211U+0080~U+07FF110××××× 10××××××316U+0800~U+FFFF1110×××× 10×××××× 10××××××421U+10000~U+10FFFF11110××× 10×××××× 10×××××× 10××××××

通過上表的編碼規則,我們就可以進行各種轉換了。

下面我們以一個中文字符的編碼轉換為例,如漢字 '好':

'好'的Unicode碼點:'好'.codePointAt() \\ 22909,結果是22909

22909在UTF-8的3字節數的編碼區間 U+0800 (2048) ~ U+FFFF (65535)

22909的二進制值:101100101111101,有15位

而3字節數的編碼需要16位,前面補0,根據表中規則分成3組:0101 100101 111101

依次填入對應的前綴:11100101 10100101 10111101,得到3個字節

將得到的三個字節轉成十六進制數據:E5 A5 BD,所以漢字 '好' 的UTF-8就是:E5 A5 BD

我們使用 encodeURI 進行驗證————encodeURI函數支持將中文進行 UTF-8 編碼:

encodeURI("好") // "%E5%A5%BD"

去除百分號,結果正好一致。

UTF-16

UTF-16的編碼方式:基本平面的字符占用 2 個字節(U+0000到U+FFFF),輔助平面的字符占用 4 個字節(U+010000到U+10FFFF)。
也就是說,UTF-16的編碼長度要么是2個字節要么是4個字節。當為2字節時,則實際上是與Unicode相同。

并且還有個原則,在Unicode基本多語言平面內,從U+D800到U+DFFF之間的碼點區間是不對應字符的。而UTF-16需要利用這塊碼位來對輔助平面的字符進行編碼。

它的具體規則:

碼點小于U+FFFF,基本字符,不需處理,直接使用,占兩個字節。

否則,拆分成兩個碼元,四個字節,cp表示碼點:

低位——((cp - 65536) / 1024) + 0xD800,值范圍是 0xD800~0xDBFF;

高位——((cp - 65536) % 1024) + 0xDC00,值范圍是 0xDC00~0xDFFF。

看下面的示例:

1.漢字 '好','好'.codePointAt() // 22909,碼點小于U+FFFF,直接進行十六進制轉換:579D。

2.表情符號 '

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一本视频| 老司机精品久久| 日韩国产精品久久久| 亚洲经典在线| 亚洲深夜影院| 中文在线不卡| 亚洲深夜av| 日韩中文字幕麻豆| 亚洲精品麻豆| 欧美亚洲自偷自偷| 国产高清亚洲| 欧美精品aa| 伊人久久高清| 亚洲精品系列| 久久国内精品| 卡一卡二国产精品| 福利一区视频| zzzwww在线看片免费| 久久这里只有精品一区二区| 91日韩在线| 免费视频亚洲| 中文字幕一区二区av| 日韩高清欧美激情| 久久97视频| 激情婷婷久久| 综合视频一区| 欧美经典一区| 91精品国产福利在线观看麻豆| 欧洲激情综合| 亚洲91网站| 欧美激情麻豆| 国精品一区二区三区| 在线精品国产亚洲| 欧美精品中文| 国产精品亚洲一区二区三区在线观看| 亚洲天堂久久| 日韩一区精品| 精品国产亚洲日本| 亚洲成av人片一区二区密柚| 中文一区一区三区免费在线观| 国产精品任我爽爆在线播放 | 日韩一区二区三区在线看| 国产精品一区二区三区av麻| 日本一二区不卡| 午夜欧美精品久久久久久久| 日韩1区2区3区| 精品欠久久久中文字幕加勒比| 99久久九九| 日韩欧美三区| 91精品国产乱码久久久久久久| 亚洲精品在线国产| av最新在线| 蜜桃视频第一区免费观看| 久久wwww| 在线亚洲自拍| 久久女人天堂| 亚洲一区日韩在线| 高清一区二区| 日韩综合小视频| 亚洲综合在线电影| 少妇高潮一区二区三区99| 久久一区视频| 亚洲中字黄色| 精品欠久久久中文字幕加勒比| 夜夜嗨一区二区三区| 欧美黑人做爰爽爽爽| 另类亚洲自拍| 不卡福利视频| 青草av.久久免费一区| 99久久九九| 国产精品videosex极品| 中文精品在线| 日韩免费久久| 欧美精品国产| 国产亚洲精品v| 国模大尺度视频一区二区| 欧美特黄一级| 国产一区二区三区不卡视频网站| 日韩精品一二区| 日韩另类视频| 国产激情久久| 日韩精品一级| 国产婷婷精品| 欧美香蕉视频| 国产美女久久| 亚洲综合色婷婷在线观看| 另类中文字幕国产精品| 国产乱码精品一区二区亚洲| 国产精品免费看| 欧洲一级精品| 国产一区二区三区天码| 亚洲人成网77777色在线播放 | 精品亚洲自拍| 日本亚州欧洲精品不卡| 欧美日韩一区二区三区视频播放| 美腿丝袜亚洲一区| 88久久精品| 亚洲专区视频| 99在线精品免费视频九九视 | 88xx成人免费观看视频库| 亚洲成人不卡| 99视频精品全国免费| 国产精品mv在线观看| 欧美精品一二| а√天堂8资源中文在线| 国产精品久久久久久久久久齐齐| 亚洲久久视频| 亚洲欧美日韩国产综合精品二区| 日韩精品诱惑一区?区三区| 国产精品一区二区中文字幕| 四虎精品一区二区免费| 日韩在线播放一区二区| 婷婷激情图片久久| 久久婷婷一区| 国产videos久久| 国产精品第十页| 色婷婷成人网| 午夜亚洲福利| 亚洲精品一级| 视频精品一区| 天海翼精品一区二区三区| 免费人成精品欧美精品| 尤物在线精品| 亚洲欧美日韩精品一区二区 | 国产精品一区三区在线观看| 久久国产婷婷国产香蕉| 欧美在线看片| 国产精品国产三级在线观看| 国产精品三级| 久久精品国产99| 国产精品任我爽爆在线播放| 国产日产高清欧美一区二区三区 | 精品国产乱码久久久久久1区2匹| 久久99性xxx老妇胖精品| 国产精品久av福利在线观看| 久久99性xxx老妇胖精品| 久久精品国产在热久久| a国产在线视频| 亚洲精品.com| 欧美日韩国产一区二区三区不卡| 国产精品色网| 蜜臀av性久久久久蜜臀aⅴ四虎| 最近国产精品视频| 日韩一区二区三区精品| 国产乱码精品| 成年男女免费视频网站不卡| 久久亚洲成人| 亚洲深深色噜噜狠狠爱网站 | 老司机精品视频在线播放| 精品国产乱码久久久| 成人亚洲欧美| 午夜久久美女| 日韩精品亚洲专区在线观看| 国产乱论精品| 国产欧洲在线| 日韩午夜av在线| 天海翼亚洲一区二区三区| 欧美片第1页综合| 中文字幕成在线观看| 午夜欧美精品久久久久久久| 日韩精品1区2区3区| 亚洲一区二区动漫| 亚洲一区二区免费看| 日本亚洲欧洲无免费码在线| 国产精品一级| 日韩av专区| 婷婷成人基地| 日本久久二区| 国产精品一线| 视频二区不卡| 日韩中文字幕一区二区三区| 国产欧美日韩| 成人看片网站| 亚洲免费资源| 精品久久中文| 亚洲一级网站| 日本欧美一区二区| 国产传媒在线观看| 首页国产欧美日韩丝袜| 国产精品扒开腿做爽爽爽软件| 日韩精品永久网址| 亚洲97av| 成人看片网站| 日韩精品福利一区二区三区| a天堂资源在线| 中文字幕日韩亚洲| 国产传媒在线| 亚洲精品伊人| 秋霞影院一区二区三区| 日韩成人精品一区二区三区| 日本综合字幕| 欧美一级二级视频| 亚洲午夜一级| 久久精品资源| 亚洲视频国产| 亚洲精品.com| 国产美女久久| 99综合视频| 久久99久久人婷婷精品综合| 中文字幕av一区二区三区人|