字符集和字符集編碼詳解

2022-08-05 11:18:14 字數 1665 閱讀 1454

gb2312\gbk\ascii\asni\unicode\utf-8等等,這些字眼非常常見,同時帶來許多的問題。

本文只是從理解的角度,說明以上內容的不同含義從而達到區分其用法的目的是夠了的。至於實現方式,可以查閱各自的詳細標準官方文件。

先解釋乙個概念,什麼是字符集,嗯,不解釋了,我弄乙個吧: = ,從今以後,1就代表寫了,以此類推,吶這就是字符集了。

電腦科學起源美國,語言以字母拼組而成,為了表示字母、數字、符號(可列印符號以及控制符號)等, 制訂了第乙份字符集,就是ascii,字符集的碼表只有8bit,窮舉只能表示256個字元。

計算機迅速發展,不同國家語言不同,為了使用計算機,只能發展自己的字符集,因為是後來的字符集,是完全相容ascii字符集的,中國的是gb2312,使用2bytes表示乙個漢字。後面陸續發現gb2312窮舉的內容不夠了,依照時間順序,以此又搞出了相容gb2312的gbk、又搞出了相容gbk的gb18030。

big5字符集和上面的差不多,只不過是繁體版本的,不過這個是乙個單獨分支,與上面的不存在相容關係。

其實上面是有問題的,微軟搞乙個作業系統,全球賣,不同國家不同字符集不同的實現方法很煩的(注意這裡的實現方法),跳出兩個大神,乙個是iso,說:全球統一用一套把,我來弄,叫ucs,又出來乙個,是語言軟體公司聯盟,說:全球一套是對的,不顧我來弄吧,叫unicode。後來過了一段時間,全球兩套字符集確實沒必要,iso和軟體聯盟商量了下,互相相容了(就是一套東西了),所以很多時候,你可以理解ucs與unicode說的是同乙個東西。

那麼好了,微軟相對開心了,弄了乙個codepage的東西,做了乙個unicode與不同國家的東西對映,不同國家的自己的字符集統一叫做了ansi,也就是說,中國大陸是ansi可以是gbk,台灣的可以是big5。

上面僅僅是字符集,可以裝訂成書大家傳閱,怎麼放到電腦中啊。這就到了編碼實現了。utf-8、ucs-2等,說的就是這個。

這裡有乙個比較重要的地方,字符集中的字元的編號與字符集編碼實現中的,也就是計算機中所儲存的編號是不同的。從字符集的編號到字符集編碼實現的編號是需要經過一定的轉換和運算的。utf-8是指unicode的字符集編碼,這是乙個變長編碼,也就是說有些字元編碼是乙個位元組,如:a,有些字元是兩個或三個位元組,至於其具體的編碼運算規則,請自行查閱utf-8的相關文件。 utf-16\utf-32分別指16bit編碼和32bit編碼,應該是非變長的。usc-2是統一全部使用2bytes編碼,用的不多。

接下來還有最後乙個問題bom,這個是由於資料在全球資訊網中傳輸引起的,不同的架構計算機的存在大端小端的不同,為了能夠不同計算機在全球資訊網下協同工作,所以在檔案頭部加入幾個不可見字元,以標識是屬於大端或小端。

具體對應關係如下:

ef bb bf    utf-8

fe ff     utf-16/ucs-2, little endian

ff fe     utf-16/ucs-2, big endian

ff fe 00 00  utf-32/ucs-4, little endian.

00 00 fe ff  utf-32/ucs-4, big-endian.

下面是兩個草圖,供參考:

字符集和字元編碼

字符集和字元編碼不錯的部落格 字符集 是乙個系統支援的所有抽象字元的集合。字元是各種文字和符號的總稱,包括各國家文字 標點符號 圖形符號 數字等。asicc,unicode,gbk,gb2312等 字元編碼 是一套法則,使用該法則能夠對自然語言的字元的乙個集合 如字母表或音節表 與其他東西的乙個集合...

字符集和字元編碼

字符集 建立文字檔案預設使用ansi,就是系統預設編碼方式,中文window系統預設使用gbk編碼方式 位元組 這是最基本的概念,位元組是計算儲存容量的一種計量單位,我們知道計算機只能識別1和0組成的二進位制位,乙個數就是1位 bit 為了方便計算,我們規定8位就是乙個位元組 字元 字元和位元組不太...

字元編碼和字符集

計算機中儲存的資訊都是用二進位制數表示的,而我們在螢幕上看到的數字 英文 標點符號 漢字等字元是二進位制數轉換之後的結果。按照某種規則,將字元儲存到計算機中,稱為編碼。反之,將儲存在計算機中的二進位制數按照某種規則解析顯示出來,稱為解碼。亂碼的根本原因 按照a規則儲存,同樣按照a規則解析,那麼就能顯...