字符編碼問題

之前在十個(gè)經(jīng)驗(yàn)點(diǎn)總結(jié)中提到了utf-8蟀苛,之前也特地去了解了一些审轮,大多是懵懵懂懂,所以這里又重新上網(wǎng)搜了各種資料欧宜,看了許多大牛的博客坐榆,以下是自己的總結(jié):

字符編碼是計(jì)算機(jī)技術(shù)的基石,想要熟練使用計(jì)算機(jī)冗茸,就必須懂得一點(diǎn)字符編碼的知識(shí)席镀。
——by 某位仁兄

術(shù)語(yǔ):

  • 位:bit
  • 字節(jié):byte 1 byte = 8 bits
  • ASCII(American Standard Code for Information Interchange):編碼標(biāo)準(zhǔn),規(guī)定了128個(gè)字符與二進(jìn)制位間的對(duì)應(yīng)關(guān)系,它同時(shí)也被國(guó)際標(biāo)準(zhǔn)化組織(International Organization for Standardization,ISO)批準(zhǔn)為國(guó)際標(biāo)準(zhǔn)ISO646
  • 擴(kuò)展ASCII碼(Extened ASCII):編碼標(biāo)準(zhǔn)夏漱,規(guī)定了256個(gè)字符與二進(jìn)制位間的對(duì)應(yīng)關(guān)系
  • Unicode:符號(hào)集豪诲, 為每一個(gè)字符分配一個(gè)唯一的ID
  • UTF-8:互聯(lián)網(wǎng)上使用最廣的一種Unicode的實(shí)現(xiàn)方式,是一種可變長(zhǎng)的編碼方式

ASCII碼

計(jì)算機(jī)內(nèi)部,所有信息最終都是一個(gè)二進(jìn)制值挂绰。每一個(gè)二進(jìn)制位(bit)有0和1兩種狀態(tài)屎篱,八個(gè)二進(jìn)制位就可以組合256種狀態(tài),這被稱為一個(gè)字節(jié)(byte),一個(gè)字節(jié)可以表示256z種不同的符號(hào)葵蒂,00000000到11111111交播,由于計(jì)算機(jī)的先驅(qū)在美國(guó)挺尿,所以60年代咏删,美國(guó)首先制定了一套字符編碼用來(lái)表示英語(yǔ)字符、標(biāo)點(diǎn)等與二進(jìn)制位間的關(guān)系栓辜,這一套標(biāo)準(zhǔn)規(guī)定的編碼稱之為ASCII碼永高,其中一共規(guī)定了128個(gè)字符與二進(jìn)制位的對(duì)應(yīng)關(guān)系隧土,其只占用了一個(gè)字節(jié)的后7位提针,第一位均為0。


ASCII碼.png

擴(kuò)展ASCII碼

由于英語(yǔ)和其他的符號(hào)使用128個(gè)符號(hào)編碼足夠了曹傀,但是考慮到其他的語(yǔ)言辐脖,顯然不夠,為此皆愉,國(guó)際標(biāo)準(zhǔn)化組織又制定了ISO2022標(biāo)準(zhǔn)嗜价,它規(guī)定了在保持與ISO646兼容的前提下將ASCII字符集擴(kuò)充為8位代碼的統(tǒng)一方法,ISO陸續(xù)制定了一批適用于不同地區(qū)的擴(kuò)充ASCII字符集亥啦,每種擴(kuò)充ASCII字符集分別可以擴(kuò)充128個(gè)字符炭剪,這些擴(kuò)充字符的編碼均為高位為1的8位代碼(即十進(jìn)制數(shù)128~255),稱為擴(kuò)展ASCII碼翔脱。


擴(kuò)展ASCII碼.png

GB2312編碼

上面1個(gè)字節(jié)貌似可以應(yīng)付很多國(guó)家地區(qū)的語(yǔ)言表示了奴拦,但對(duì)于漢字來(lái)說,1個(gè)字節(jié)明顯不夠届吁,所以中國(guó)制定了GB2312編碼错妖,用來(lái)把中文編進(jìn)去,使用兩個(gè)字節(jié)表示一個(gè)漢字疚沐,所以理論上最多可以表示 256x256=65536 個(gè)符號(hào)暂氯。

Unicode: 為統(tǒng)一而生

經(jīng)過??描述可以發(fā)現(xiàn),各個(gè)國(guó)家地區(qū)貌似都有了不同的編碼方式痴施,導(dǎo)致各有各的標(biāo)準(zhǔn),因此在網(wǎng)絡(luò)傳輸?shù)雀鱾€(gè)方面都會(huì)發(fā)生沖突辣吃,明顯的結(jié)果就是亂碼現(xiàn)象芬探。

試想神得,如果有一種編碼,能夠?qū)⑹澜缟纤械姆?hào)都納入其中偷仿。每一個(gè)符號(hào)都給予一個(gè)獨(dú)一無(wú)二的編碼,那么亂碼問題就會(huì)消失酝静,Unicode應(yīng)運(yùn)而生。

Unicode標(biāo)準(zhǔn)在不斷發(fā)展别智,但最常用的是用2個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符全跨,就需要4個(gè)字節(jié))

注意,注意亿遂,注意Eㄈ簟I呤!碌上!
Unicode并不涉及字符是怎么在字節(jié)中表示的浦徊,它僅僅指定了每一個(gè)字符對(duì)應(yīng)的數(shù)字,僅此而已盔性。(Unicode只是一個(gè)用來(lái)映射字符和數(shù)字的標(biāo)準(zhǔn)。它對(duì)支持字符的數(shù)量沒有限制冕香,也不要求字符必須占兩個(gè)悉尾、三個(gè)或者其它任意數(shù)量的字節(jié)。)

UTF-8: 為節(jié)約而生

注意到构眯,使用unicode編碼的話,由于最常用的是使用2個(gè)字節(jié)猫缭,但是考慮到國(guó)際語(yǔ)言英文它褪,使用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間,在存儲(chǔ)和傳輸上就十分不劃算茫打。
因此老赤,就出現(xiàn)了"可變長(zhǎng)編碼"的UTF-8編碼,UTF-8編碼是在互聯(lián)網(wǎng)上使用最廣的一種Unicode的實(shí)現(xiàn)方式轮洋,常用的英文字母被編碼成1個(gè)字節(jié)抬旺,漢字通常是3個(gè)字節(jié),只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)汉柒。
關(guān)于UTF-8的編碼規(guī)則:
1.單字節(jié)字符等同于ASCII碼
2.n個(gè)字節(jié)的字符(n>1),第一個(gè)字節(jié)的前面n位都設(shè)置為1碾褂,第n+1位設(shè)置為0,后面n-1個(gè)字節(jié)8位的前兩位設(shè)置為10嘀略,其余的二進(jìn)制位設(shè)置為該字符的Unicode碼(從后向前)

UTF-16乓诽,UTF-32

通過??可以了解到UTF-8是Unicode最普遍的一種實(shí)現(xiàn)方式,那么當(dāng)然還有其他的實(shí)現(xiàn)方式讼育,包括:
UTF-16——字符用兩個(gè)字節(jié)或四個(gè)字節(jié)表示粮宛;
UTF-32——字符用四個(gè)字節(jié)表示;

Unicode忧饭、UTF-8在計(jì)算機(jī)中的轉(zhuǎn)化

一般情況是這樣:在計(jì)算機(jī)內(nèi)存中筷畦,統(tǒng)一使用Unicode編碼,為了節(jié)省空間鳖宾,當(dāng)需要保存在硬盤或者傳輸的時(shí)候,就轉(zhuǎn)換為UTF-8編碼渔肩,
以記事本為例:
記事本編輯的時(shí)候拇惋,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后蓉坎,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件胡嘿。

小結(jié):

記住一個(gè)順序:
ASCII => EASCII => Unicode => UTF-8


參考文章:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html——阮一峰的網(wǎng)絡(luò)日志
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000——廖雪峰關(guān)于字符串與編碼

~~~~~
這個(gè)世界上從來(lái)沒有純文本這回事,如果你想讀出一個(gè)字符串勿侯,你必須知道它的編碼
~~~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吴藻,隨后出現(xiàn)的幾起案子弓柱,更是在濱河造成了極大的恐慌侧但,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁药,死亡現(xiàn)場(chǎng)離奇詭異柏锄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缭嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門妇蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笤成,“玉大人,你說我怎么就攤上這事炕泳。” “怎么了浙芙?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵荤懂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我晤锥,道長(zhǎng),這世上最難降的妖魔是什么女轿? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任壕翩,我火速辦了婚禮,結(jié)果婚禮上北救,老公的妹妹穿的比我還像新娘芜抒。我一直安慰自己,他們只是感情好宅倒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布拐迁。 她就那樣靜靜地躺著,像睡著了一般铺韧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祟蚀,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天割卖,我揣著相機(jī)與錄音,去河邊找鬼罢维。 笑死丙挽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的平窘。 我是一名探鬼主播凳怨,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼是鬼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼紫新!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起囤耳,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤充择,失蹤者是張志新(化名)和其女友劉穎匪蟀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萄窜,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡查刻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年凤类,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佃延。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夷磕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尺棋,到底是詐尸還是另有隱情绵跷,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布荆残,位于F島的核電站净当,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜品擎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一备徐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秀菱,春花似錦蹭睡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至祟昭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谜叹,已是汗流浹背搬葬。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留停局,地道東北人香府。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓企孩,卻偏偏與公主長(zhǎng)得像锭碳,于是被迫代替她去往敵國(guó)和親勿璃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子推汽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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