貓貓學(xué)編碼

編碼

在上一篇文章中,我遇到了關(guān)于swift中的emoj字符串的utf16.cout才能等于NSString.cout的神奇問(wèn)題。處于對(duì)utf8的好奇以及編碼知識(shí)的了解,我決定好好了解下編碼這一個(gè)學(xué)問(wèn)解藻。
Swift5中String.count 與 NSString.length不相等:http://www.reibang.com/p/f135cab4dd45

ASCII標(biāo)準(zhǔn)字符集

ASCII是計(jì)算機(jī)的第一個(gè)編碼標(biāo)準(zhǔn),是按照美國(guó)人的習(xí)慣定制的

  1. 用1個(gè)字節(jié)來(lái)表示葡盗,并且限制了最高位必須為0螟左,所以只能表示2^7=128個(gè)不同字符啡浊。例如:

    • 大寫字符A 在ASCII中用 0100 0001(二進(jìn)制,最高位為0)表示,A在ASCII中的碼位就是0100 0001, 10進(jìn)制為65胶背,16進(jìn)制為0x41
    • 范圍就是 0000 0000 -> 0111 1111 共128
  2. 分為可見字符和控制字符:

    • 32-126 代碼可見字符巷嚣,共計(jì)95個(gè)(abcd符號(hào)等可見的字符)
    • 0-31,127 代表控制字符,共計(jì)33個(gè)(回車,換行,退格等控制字符)

擴(kuò)展ASCII字符集

一些歐洲國(guó)家在原有的ASCII上進(jìn)行了擴(kuò)展钳吟,也就是把第一位也用上了廷粒,將首位0變?yōu)?,這樣就多出來(lái)了128個(gè)字符红且。這樣擴(kuò)展后的ASCII字符集就有256個(gè)字符了坝茎。

16位字符集

不管是老美的128個(gè)的ASCII,還是老歐的256擴(kuò)展ASCII暇番,這點(diǎn)數(shù)量對(duì)于我們中國(guó)的方塊字來(lái)說(shuō)都是不值一提的嗤放。。壁酬。 太少了
所以我們需要設(shè)計(jì)我們自己的字符集次酌。

GB2312字符集(GB=國(guó)標(biāo))

使用分區(qū)管理,共計(jì)94個(gè)分區(qū)舆乔,每個(gè)區(qū)94個(gè)位岳服,一共8836個(gè)碼位

  • 01-09區(qū)收錄除漢字外的682個(gè)字符。
  • 10-15區(qū)為空白區(qū)希俩,沒(méi)有使用吊宋。
  • 16-55區(qū)收錄3755個(gè)一級(jí)漢字,按拼音排序斜纪。
  • 56-89區(qū)收錄3008個(gè)二級(jí)漢字贫母,按部首/筆畫排序文兑。
  • 88-94區(qū)為空白區(qū)盒刚,沒(méi)有使用。

例如:“啊“在16區(qū)0排1位绿贞,用2字節(jié)表示為0xB0 0xA1 (0xB0=0xA0+16,0xA1=0xA0+1)(為啥要加A0呢因块,為了避開ASCII中的不可顯示字符。)其實(shí)這里我也就是了解一下籍铁,感興趣的話具體可以看維基百科

GBK

對(duì)GB2312進(jìn)行擴(kuò)充涡上,把空位進(jìn)行填充,形成了GBK編碼拒名。

GB18030

通過(guò)對(duì)GBK擴(kuò)充吩愧,加入少數(shù)民族語(yǔ)言字符等,就形成了GB18030編碼增显。

Unicode

  • Unicode雁佳,中文又稱萬(wàn)國(guó)碼、國(guó)際碼、統(tǒng)一碼糖权、單一碼堵腹,是計(jì)算機(jī)科學(xué)領(lǐng)域的業(yè)界標(biāo)準(zhǔn)。它整理星澳、編碼了世界上大部分的文字系統(tǒng)疚顷,使得電腦可以用更為簡(jiǎn)單的方式來(lái)呈現(xiàn)和處理文字。維基百科
  • ISO組織定制了通用字符集(英語(yǔ):Universal Character Set, UCS)

UTF-8

  • UTF-8是對(duì)Unicode字符集的一種字符編碼 禁偎。
  • 針對(duì)每個(gè)字節(jié)的前綴不同腿堤,對(duì)字符集中的有效碼點(diǎn)進(jìn)行編碼,是一種可變長(zhǎng)度的字符編碼
碼點(diǎn)的位數(shù) 碼點(diǎn)起值 碼點(diǎn)終值 字節(jié)序列 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
7 U+0000 U+007F 1 0xxxxxxx
11 U+0080 U+07FF 2 110xxxxx 10xxxxxx
16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx
21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

例如:
當(dāng)我們?cè)趕wift中打印utf8和unicodeScalars時(shí)候如下

"貓".utf8
? UTF8View("貓")
  - 0 : 231
  - 1 : 140
  - 2 : 171
"貓".unicodeScalars
? StringUnicodeScalarView("貓")
  - 0 : "\u{732B}"

unicodeScalars 是字符集的具體碼位如暖,可以用系統(tǒng)的科學(xué)計(jì)算器看一下:


那utf8的數(shù)怎么來(lái)的呢释液?

  1. 貓:u{732b}的碼位是這樣的:
    • 111 0011 0010 1011
  2. 根據(jù)上面的表,我們找到與對(duì)應(yīng)的規(guī)則為第三排的:
    • 1110xxxx 10xxxxxx 10xxxxxx
  3. 將1的二進(jìn)制碼插入到2的x空位中得出:
    • 1110 0111 1000 1100 1010 1011
  4. 將3換算為10進(jìn)制:
    • 231 140 171
  5. 宗上4步装处,我們就得出了我們?cè)趕wift中顯示的"貓".utf8的三個(gè)數(shù)字了误债。

簡(jiǎn)而言之,unicode是標(biāo)準(zhǔn)妄迁,他包含了utf-8寝蹈、utf-16、utf-32這些編碼登淘。
也包含了ucs-2箫老、ucs-4的這些字符集。

`
更多其他可以參考維基百科:

PS

字節(jié)Byte

1字節(jié)(Byte) = 8位(bit)

1個(gè)16進(jìn)制=4位:
0xf = 1111
所以通常我們1Byte(也就是8bit)會(huì)用兩個(gè)16進(jìn)制來(lái)表示:
0xff = 1111 1111
0x00 = 0000 0000

單位換算

單位 單位備注 低位兌換 低位備注
1Byte 1字節(jié) 8bit 8位(0000 0000 - 1111 1111)(0x00-0xff)
1KB 1千字節(jié)(Kilobyte) 1024字節(jié) 2的10次方字節(jié)(1KB=1024B)
1MB 1兆字節(jié)(Megabyte) 1024千字節(jié) 2的20次方字節(jié)(1MB=1024KB)
1GB 1吉字節(jié)(Gigabyte) 1024兆字節(jié) 2的30次方字節(jié)(1GB=1024MB)
1TB 1千吉字節(jié)(Terabyte) 1024吉字節(jié) 2的40次方字節(jié)(1TB=1024GB)

比特

二進(jìn)制數(shù)系統(tǒng)中黔州,每個(gè)0或1就是一個(gè)位(bit)耍鬓,位是數(shù)據(jù)存儲(chǔ)的最小單位。其中8bit就稱為一個(gè)字節(jié)(Byte)流妻。計(jì)算機(jī)中的CPU位數(shù)指的是CPU一次能處理的最大位數(shù)牲蜀。例如32位計(jì)算機(jī)的CPU一次最多能處理32位數(shù)據(jù)

  1. 計(jì)算機(jī)專業(yè)術(shù)語(yǔ),是信息量單位绅这,是由英文BIT音譯而來(lái)涣达。二進(jìn)制數(shù)的一位所包含的信息就是一比特,如二進(jìn)制數(shù)0101就是4比特证薇。
  2. 二進(jìn)制數(shù)字中的位度苔,信息量的度量單位,為信息量的最小單位浑度。數(shù)字化音響中用電脈沖表達(dá)音頻信號(hào)寇窑,"1"代表有脈沖,"0"代表脈沖間隔箩张。如果波形上每個(gè)點(diǎn)的信息用四位一組的代碼表示甩骏,則稱4比特完残,比特?cái)?shù)越高,表達(dá)模擬信號(hào)就越精確横漏,對(duì)音頻信號(hào)信號(hào)還原能力越強(qiáng)谨设。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缎浇,隨后出現(xiàn)的幾起案子扎拣,更是在濱河造成了極大的恐慌,老刑警劉巖素跺,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件二蓝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡指厌,警方通過(guò)查閱死者的電腦和手機(jī)刊愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)踩验,“玉大人鸥诽,你說(shuō)我怎么就攤上這事』叮” “怎么了牡借?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)袭异。 經(jīng)常有香客問(wèn)我钠龙,道長(zhǎng),這世上最難降的妖魔是什么御铃? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任碴里,我火速辦了婚禮,結(jié)果婚禮上上真,老公的妹妹穿的比我還像新娘咬腋。我一直安慰自己,他們只是感情好谷羞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布帝火。 她就那樣靜靜地躺著,像睡著了一般湃缎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蠢壹,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天嗓违,我揣著相機(jī)與錄音,去河邊找鬼图贸。 笑死蹂季,一個(gè)胖子當(dāng)著我的面吹牛冕广,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偿洁,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼撒汉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涕滋?” 一聲冷哼從身側(cè)響起睬辐,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宾肺,沒(méi)想到半個(gè)月后溯饵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锨用,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年丰刊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片增拥。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啄巧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掌栅,到底是詐尸還是另有隱情棵帽,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布渣玲,位于F島的核電站逗概,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忘衍。R本人自食惡果不足惜逾苫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枚钓。 院中可真熱鬧铅搓,春花似錦、人聲如沸搀捷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫩舟。三九已至氢烘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間家厌,已是汗流浹背播玖。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饭于,地道東北人蜀踏。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓维蒙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親果覆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颅痊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 一、姓名存儲(chǔ)和展現(xiàn) 1. 按學(xué)生總表編碼存儲(chǔ) 李洋薛鵬磊按照學(xué)生總表進(jìn)行編碼局待,并將編碼進(jìn)行存儲(chǔ)或者發(fā)送 左邊是客戶...
    果芽軟件閱讀 5,091評(píng)論 0 0
  • 文件編碼格式 從文件編碼的方式來(lái)看斑响,文件可分為ASCII碼文件和二進(jìn)制碼文件兩種。 ASCII文件也稱為文本文件燎猛,...
    beimingke閱讀 2,804評(píng)論 0 1
  • 1. ASCII ??我們知道,計(jì)算機(jī)內(nèi)部是通過(guò)二進(jìn)制數(shù)據(jù)進(jìn)行操作的昭卓,所有的信息最終都會(huì)轉(zhuǎn)換為一個(gè)二進(jìn)制值愤钾,二進(jìn)制...
    騎著烏龜去看海閱讀 1,636評(píng)論 0 4
  • 字符編碼是人類和計(jì)算機(jī)交流的橋梁 計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制字符(0和1),這是計(jì)算機(jī)的設(shè)計(jì)所決定的候醒。而人類的語(yǔ)言字符要想...
    高鴻祥閱讀 1,070評(píng)論 0 0
  • 前言 近日遇到一個(gè)神奇的問(wèn)題倒淫,在github上找了開源庫(kù)伙菊,使用如下兩種不同的運(yùn)行方式得到的運(yùn)行結(jié)果也不同,但理論上...
    差不多先生Ai閱讀 1,673評(píng)論 0 5