簡(jiǎn)單理解編碼

適用對(duì)象

1、計(jì)算機(jī)相關(guān)類的技術(shù)人(研發(fā)、測(cè)試等)
2、對(duì)計(jì)算機(jī)編碼感興趣的其它人士
3、想知道為什么會(huì)出現(xiàn)亂碼的人

本文的目的

本文從實(shí)用角度出發(fā),并不會(huì)嚴(yán)格按照編碼的規(guī)范來書寫,如,字符集對(duì)應(yīng)的字符編碼名稱并不準(zhǔn)確,但不影響讀者對(duì)編碼整體的理解。主要目的是讓讀者對(duì)編解碼有個(gè)初步的了解,以計(jì)算機(jī)中為什么會(huì)出現(xiàn)亂碼。

為什么需要編碼


  計(jì)算機(jī)能理解的語言是二進(jìn)制的(0,1),人類的語言(英文、中文以及其它語言)計(jì)算機(jī)是無法直接理解的,同樣,計(jì)算機(jī)的二進(jìn)制語言,人類也是無法直接理解的,所以需要進(jìn)行轉(zhuǎn)換,這個(gè)轉(zhuǎn)換的過程就叫編解碼。
  由字符到字節(jié)叫編碼,由字節(jié)到字符叫解碼。

字符集與字符編碼

計(jì)算機(jī)中存儲(chǔ)信息的最小單元(能表示一個(gè)具體含義的內(nèi)容,不是最小單位)是字節(jié),一個(gè)字節(jié)包括8個(gè)二進(jìn)制位(最小單位是位bit)。
  用一個(gè)字節(jié)表示世界上所有的語言是不夠的(2的8次方),所以人們又發(fā)明了字符的概念,用多個(gè)字節(jié)表示一個(gè)字符,不同語言有不同的字符集以及與對(duì)應(yīng)二進(jìn)制的轉(zhuǎn)換關(guān)系。
  字符的集合體叫做字符集,字符與二進(jìn)制的轉(zhuǎn)換規(guī)則叫做編解碼。很多時(shí)候,我們說的ASCII編碼,其實(shí)是包含了ASCII字符集以及其對(duì)應(yīng)的字符編碼,只不過很多字符集只有一種編碼,所以才不會(huì)有問題,Unicode除外。

常見的字符集與字符編碼:

| 字符集 |字符編碼 |簡(jiǎn)單介紹 |
| ------- :| --------- :| -------- :|
| ASCII | ASCII |單字節(jié),使用了7位 |
| ISO-8859-1 | ISO-8859-1 |也叫Latin-1,單字節(jié),擴(kuò)展了ASCII,可解碼ASCII |
| GB2312 | GB2312 |小于0XFF用單字節(jié),否則用雙字節(jié)|
| GBK | GBK |擴(kuò)展GB2312,規(guī)則同上,可解碼GB2312|
| Unicode | UTF-8 |變長(zhǎng)1-6字節(jié)|
| Unicode | UTF-16 |雙字節(jié)|
| Unicode | UTF-32 |定長(zhǎng)四字節(jié)|

造成亂碼的原因

通過上面了解了什么叫做編碼,以及字符集與字符編碼,現(xiàn)在講一下亂碼是因?yàn)槭裁丛蛟斐傻摹?br>   以中文字符“我”為例,我的Unicode碼是6211(UTF-16編碼,十進(jìn)制是25105)。

1、經(jīng)過GBK編碼,然后再進(jìn)行ISO-8859-1解碼

  一個(gè)字符的“我”字,進(jìn)行GBK編碼,一個(gè)字符采用雙字節(jié)表示(小于0XFF除外),然后再進(jìn)行ISO-8859-1解碼,一個(gè)字節(jié)對(duì)應(yīng)一個(gè)字符,最終變成了兩個(gè)字符。

2、經(jīng)過ISO-8859-1編碼再經(jīng)過ISO-8859-1解碼

  進(jìn)行ISO-8859-1編碼,一個(gè)字符采用單字節(jié)表示,6211超出了其編碼范圍,所以用3f表示(未知),然后再進(jìn)行ISO-8859-1解碼,一個(gè)字節(jié)對(duì)應(yīng)一個(gè)字符,最終變成了1個(gè)字符的“?”。
  其它編碼流程大體同上,還有更復(fù)雜的組合場(chǎng)景,如,將圖1的結(jié)果再進(jìn)行GBK編碼與GBK解碼(結(jié)果如何呢?)。
  總之以上問題,都是因?yàn)樵诰幋a與解碼的時(shí)候沒有使用合適的字符集以及對(duì)應(yīng)字符編碼才導(dǎo)致出現(xiàn)了亂碼的場(chǎng)景。

總結(jié)

本文首先介紹了什么叫做編碼,為什么我們需要編碼,然后介紹了常見的字符集以及對(duì)應(yīng)的字符編碼,最后介紹了亂碼的原因。讀者再理解了以上內(nèi)容之后,如果在日常工作中再遇到編碼問題,可以根據(jù)本文的內(nèi)容進(jìn)行分析,希望能幫到大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容