字符集和編碼

2021-09-29 20:33:39 字數 1483 閱讀 7198

位和位元組對程式設計師而言應該是無需贅述的概念,如果你是程式設計師出身,且對這兩個概念不甚了解的話就需要反思了。

位:資料儲存的最小單位。在計算機中的二進位制數系統中,位,簡記為b,也稱為位元,每個0或1就是乙個位(bit)。計算機中的cpu位數指的是cpu一次能處理的最大位數。

通俗地說,位就是指乙個二極體的狀態0/1(開/關)。

位元組:位元組(byte )是計算機資訊技術用於計量儲存容量的一種計量單位,作為乙個單位來處理的乙個二進位制數字串,是構成資訊的乙個小單位。最常用的位元組是八位的位元組,即它包含八位的二進位制數。

位和位元組的關係可以理解為,英語是由26個字母組成,但是講話時,卻是用多個單詞拼成的句子。單個字母並無實際意義(某些特例除外)。

字元是指能夠表達含義的不可分割的最小單位。字元包括字母、數字、運算符號、標點符號和其他符號,以及一些功能性符號。

顧名思義,字符集就是指字元的集合。不同的人群或不同的場景需要不同字符集,因此當下有很多種

字符集。字符集中所有字元是按照指定書序進行排列的常見的字符集有:ascii 、gb2312 gbk、big5、unicode

其中unicode 又稱為萬國碼,旨在收集全球所有的字元,為每個字元分配唯一的字元編號。

unicode是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。目前的unicode字元分為17組編排,0x0000 至 0x10ffff,每組稱為平面(plane),而每平面擁有65536個碼位,共1114112個。然而目前只用了少數平面。

計算機中各種資料都是以二進位制儲存的,既然字已經有字符集了並且字符集是有順序的,那在儲存字元時直接使用字元的位置序號不就可以了嗎?可以解決問題,但不是最佳解決方案。如果直接使用位置序號,會帶來極大空間的浪費。比如講英文的國家,通常只需要用到位於unicode字符集靠前部分的字母(前128位,即ascii字符集中字元),即乙個位元組就能表達出其位置,但儲存時卻需要三個位元組來儲存(高位補0)。

高位補0的原因是:比如兩個單位元組的字元連在一起時,無法區分是乙個雙子節字元還是兩個單位元組字元。

字元編碼存在的意義是,通過一定的規則,用盡可能少的位元組表示字元在字符集中的位置(建立對映關係)。因此字符集必須和編碼方式搭配使用。unicode常見的編碼方式有:utf-16 、utf-8 、utf-32。

有些字符集既是字符集也是字元編碼,比如gbk

文字程式以流的方式將檔案讀取到記憶體中

在對流進行解析時,會指定編碼格式,比如utf-8

通過utf-8編碼後,就可以獲知該字元在字符集中(unicode)的位置序號

通過位置序號轉化位對應的字元,並加以展示。

如果檔案本身不是通過utf-8編碼的,在讀取時以utf-8編碼,就會導致解碼失敗,從而出現亂碼。

字符集和字符集編碼詳解

gb2312 gbk ascii asni unicode utf 8等等,這些字眼非常常見,同時帶來許多的問題。本文只是從理解的角度,說明以上內容的不同含義從而達到區分其用法的目的是夠了的。至於實現方式,可以查閱各自的詳細標準官方文件。先解釋乙個概念,什麼是字符集,嗯,不解釋了,我弄乙個吧 從今以...

字符集和編碼

什麼是字元?字元就是文字和符號的統稱,字符集就是多個字元的集合,字符集有很多種,常見的有ascii,gb2312,unicode字符集。什麼是編碼?計算機要準確的處理字符集中的文字,就需要對字元進行編碼。對unicode字符集編碼的叫做unicode編碼,對ascii字符集編碼叫做ascii編碼。a...

編碼和字符集

ascii unicode gb2312等都是字符集,用於定義編號指代的字元。utf 8,utf 16則是unicode的編碼格式。ascii ascii只有128個,能表示英文 數字 常用符號。gb2312 gb2312是中文特有的字符集,有2萬多個字元,前128個和ascii保持一致,因此能相容...