Unicode字元編碼

2021-07-10 12:02:00 字數 1720 閱讀 4900

ascii碼:

最早的字元編碼,使用乙個byte的7位來表示128種字元(控制字元,控制符,小寫字母,大寫字母,數字,標點,運算子等)。

然而對於英語國家來說,基本夠用;但對於使用非英文本元的國家來說,就不夠用了。

擴充套件ascii碼:

為了滿足需要,各國在相容ascii碼的基礎上對128-155等位元組進行本國語言對應編碼,或者不同系統畫圖元素進行編碼,出現了各種不相容的擴充套件ascii碼。

擴充套件ascii碼基本滿足了表音文字的表示,但對於中文等表意文字完全不夠用,中文漢字有上萬個。

gb-***x,big5等:

於是表意文字國家開始使用兩個位元組來表示本國文字編碼,也是標準繁多。

對於gb-2312,相容了ascii碼,所有的非ascii碼都用兩個高位為一的位元組表示,後續又有各自標準對其補充。

由最初的計算機未普及而完全夠用的ascii碼,到後來由於全球普及而產生的各國編碼大亂鬥,導致了很多相容性的問題。

經常會出現本來正確的文字卻顯示為亂碼,或者問號等。

unicode:

為了形成大一統的局面,unicode應聲而出。unicode對世界上已知的所有字元、文字等都進行了唯一編碼,各不衝突,是乙個全集。

unicode使用兩個位元組進行編碼,由於兩個後來不太夠用,又出現了分層表示(共17層),總的表示區間為:0x0000 - 0x10ffff。

注意,其實所有的編碼方式包含兩部分:字元編碼方式,資料轉換方式。大部分兩者編碼相同,不進行區分,但考慮到相容性的問題,unicode具有不同的資料轉換方式。

utf-32:

將所有的unicode字元編碼都用四個位元組資料儲存,完全夠用,但浪費空間,不相容最流行的ascii碼。

utf-16:

使用兩個位元組(0x0000-0xffff)或者四個位元組(0x0001 0000-0x0010 ffff)資料儲存方式,稍微節省,也是浪費,不相容ascii碼。

utf-8:

使用一到四個位元組儲存,相容ascii碼。由於使用變長度的方式儲存,故utf-8需要專門的識別方案。

0x00-0x7f -> 0******x 直接儲存,對應於ascii碼

0x0080 - 0x07ff -> 110***xx 10****** 首位元組的0之前的1的個數表明使用多少個位元組編碼,後面的跟隨位元組都是10開始

0x0800 - 0xffff -> 1110***x 10****** 10******

0x0001 0000 - 0x001f ffff -> 11110*** 10****** 10******x 10******

對於如何獲知乙個檔案使用的編碼格式,存在三種方式:

1.附帶說明(在其它地方說明檔案使用的編碼);

2.bom表示(在文字的前2/3個位元組新增表示編碼方式的字元,utf-16be的bom為feff,utf-16le為fffe,utf-8為efbbbf);

3.猜(呵呵,其實大部分文字檔案都靠猜)。

為了保證與ascii的相容性,utf-8在類unix系統下無bom,windows的記事本儲存時帶bom。

下面兩幅圖是對於同樣的字母使用記事本的不同儲存格式得到的不同十六進製制儲存內容比較,ansi為系統預設字元編碼,中文好像是gb-2312.

字元編碼 unicode編碼

1.ascii american standard code for information interchange 美國資訊交換標準 這是計算機上最早使用的通用的編碼方案。那個時候計算機還只是拉丁文本的專利,根本沒有想到現在計算機的發展勢頭,如果想到了,可能一開始就會使用unicode了。當時絕大...

多字元編碼 和 Unicode編碼

四字符集和字元編碼說明 五 其他 c 基本資料型別中表示字元有兩種 char wchar t char 叫多位元組字元,乙個char佔乙個位元組,之所以叫多位元組字元是因為它表示乙個字時可能是乙個位元組也可能是多個位元組。乙個英文本元 如 s 用乙個char 乙個位元組 表示,乙個中文漢字 如 中 ...

unicode字元編碼區間表

因為我也沒有找到更適合的參考資料,因此只能自己生成乙份編碼表,然後從中找出這些特徵,不過大部份來說都是準確的,有些個別的外語,我也不知道是什麼。文 it柏拉圖 至於這個表是幹嗎的,如果你想對使用者輸入的一些東西進行過濾或嘗試識別亂碼,或編碼具於utf 8編碼的分詞系統,那麼這些參考資料是很有意義的。...