對(duì)亂碼問(wèn)題本源的探索

關(guān)鍵詞:


問(wèn)題來(lái)源

我們經(jīng)常會(huì)遇到中文亂碼問(wèn)題,也時(shí)常要絞盡腦汁去解決它。那么,當(dāng)我們把不同的字符輸入到電腦后,電腦程序到底怎么來(lái)理解它呢?電腦又是怎樣進(jìn)行的‘’字符的翻譯‘’,亂碼問(wèn)題到底出現(xiàn)在哪?為了解釋這些問(wèn)題,我們引入幾個(gè)例子來(lái)幫助理解。


示例一:用戶輸入的人機(jī)理解過(guò)程

  • 用戶輸入的人機(jī)理解過(guò)程:
    輸入——>鍵盤碼——>交換碼——>內(nèi)部碼——>地址碼——>字形碼——>輸出

  • 鍵盤碼:輸入設(shè)備(鍵盤,鼠標(biāo)等)對(duì)應(yīng)的系統(tǒng)鍵值或者經(jīng)過(guò)編碼后的acsii碼

  • 交換碼:將接收的字符做計(jì)算機(jī)可支持的字符編碼,例如我們常用的utf-8,assii等。

  • 內(nèi)部碼:將對(duì)應(yīng)已編碼的字符存儲(chǔ)為二進(jìn)制形式。

  • 地址碼:實(shí)際的存儲(chǔ)地址,為二進(jìn)制形式。

  • 字形碼:根據(jù)相應(yīng)原理或算法生成對(duì)應(yīng)輸入接受類型字符


示例二:查找不認(rèn)識(shí)的單詞的過(guò)程

從上面過(guò)程我們可以看出,亂碼出現(xiàn)在已接收字符進(jìn)行交換碼與內(nèi)部碼轉(zhuǎn)化的過(guò)程中,那我們想想英語(yǔ)小白在實(shí)際生活中遇到一個(gè)不認(rèn)識(shí)的單詞會(huì)怎么辦呢?

  • 查找不認(rèn)識(shí)的單詞的過(guò)程
    不認(rèn)識(shí)的單詞——>使用雙語(yǔ)字典查詢——>根據(jù)查詢規(guī)則獲得單詞位置——>根據(jù)位置找到該單詞實(shí)際示意

我們歸納上面的例子可以理解實(shí)際轉(zhuǎn)碼的要點(diǎn),即:

  • 字庫(kù)表(character repertoire):可讀或者可顯示字符的集合,字庫(kù)表表示了整個(gè)字符集能夠展現(xiàn)表示的所有字符的范圍,例如中-英雙語(yǔ)所包含的字。
  • 編碼字符集(coded character set):即用一個(gè)編碼值來(lái)表示一個(gè)字符在字庫(kù)中的位置,例如單詞在字典中的位置。
  • 字符編碼(character encoding form):編碼字符集和實(shí)際存儲(chǔ)數(shù)值之間的轉(zhuǎn)換關(guān)系,例如不同字典規(guī)定的規(guī)則,按字母、詞性排序等。

示例三:字符編碼存在的意義

通過(guò)三要點(diǎn)歸納,大家有可能會(huì)發(fā)現(xiàn),字庫(kù)表對(duì)應(yīng)著字符的值,編碼字符集對(duì)應(yīng)著表中的的位置,這種鍵-值形式已經(jīng)能滿足電腦查詢的功能了,那么字符編碼存在的意義在哪呢?這其實(shí)很好理解,如果我們想要用一本字典查詢所有我們不知道的字符,這就要求我們的字典必須包含的范圍足夠大,內(nèi)容足夠多。可是對(duì)于我們上文提到的新單詞問(wèn)題而言,我僅僅需要解決一個(gè)很小的麻煩,僅僅需要一本中英雙語(yǔ)詞典就能搞定了。對(duì)于計(jì)算機(jī)和程序的使用也是類似,我只需要存儲(chǔ)我需要且常用的字典,而不需要將偌大的字典存進(jìn)來(lái)消耗我的內(nèi)存和查詢時(shí)間。而字符編碼就解決詞典切分和其他規(guī)則定義的需求。


常用的字符集與字符編碼

通過(guò)上面的舉例,相信大家對(duì)兩者一有了明確的認(rèn)識(shí),那我就列舉出常見的字符表與字符編碼。

  • 字符集/字符編碼:ASCII字符集/ASCII編碼、GBxxxx字符集/GBxxxx編碼、BIG5字符集/BIG5編碼、Unicode字符集/UTF-32 UTF-16 UTF-8編碼等。

亂碼出現(xiàn)的原因

用了不相對(duì)應(yīng)的編碼與解碼方式,導(dǎo)致對(duì)同一字符進(jìn)行不同的翻譯解釋。所以,在實(shí)際操作過(guò)程中,盡量先弄明白輸入與輸出的編碼方式,同時(shí)檢查你編碼文件的默認(rèn)打開編碼方式,這樣能一定程度上幫你解決亂碼問(wèn)題。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 編碼問(wèn)題一直困擾著開發(fā)人員,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,498評(píng)論 1 20
  • 為什么要編碼 不知道大家有沒(méi)有想過(guò)一個(gè)問(wèn)題,那就是為什么要編碼?我們能不能不編碼?要回答這個(gè)問(wèn)題必須要回到計(jì)算機(jī)是...
    艾小天兒閱讀 17,481評(píng)論 0 2
  • 經(jīng)理說(shuō)得對(duì),選擇才是最困難的 兩條路,到底怎么選。。。
    Ewan丶閱讀 215評(píng)論 1 2
  • 不知道未來(lái)的路會(huì)怎樣,不知道未來(lái)的生活會(huì)想哪個(gè)方向前進(jìn),總是覺得自己與眾不同,心比天高,卻還是要腳踏實(shí)地,想的總比...
    污婆666閱讀 196評(píng)論 0 0