字元編碼問題

花瓣飘落的地方發表於2024-06-15

常使用的幾種字元編碼和相互之間關係

我們做程式設計開發時,經常看到並使用的一些字符集,如GBK、Uniode、UTF-8等等。但是我們在使用他們時,如果對底層原理淺嘗輒止往往在專案開發時,遇到相關問題摸不著頭緒,本文先來淺析一下它們彼此的關係。

計算機在儲存資訊時,不管是英文字元還是中文字元最終都是儲存為儲存為0、1的二進位制資料。例如字元'A'對應的ASSIC值是65,那麼轉換成二進位制資料就是01000001.舉一個簡單的例子,這就是我們輸入在電腦中的字元和最終儲存的資料形式。此時會有說,既然每個字元都有其一一對應的ASSIC值,那麼我們直接用ASSIC編碼集統一不就行了,為什麼還搞出這麼多的編碼集,在資料互動和儲存時還得注意編碼集的使用。

Unicode字符集:

當然,如果用的是英文,這當然是滿足需求了,但是考慮到這個世界有很多的國家和地區、他們彼此之間使用不同的語言,如果單單使用ASSIC這一套字符集,顯然是不滿足需求的,例如單單一箇中文就搞出來好幾套字元編碼,簡體字一般使用GB23112和後來的GBK等編碼格式,繁體字使用Big5。日文使用的是Shift JIS、ECU-JP等等、其他家就更多了,羅列下來字符集就非常多了,這使得不同文字之間的互動變的困難,此時為了解決該問題,Unicode字符集便應運而生,Unicode字符集為了相容世界各國語言之間難以相容互動的問題,將原來ASSIC一個位元組表示一個字元的基礎上,擴充套件到了後來的四個位元組,這基本上可以將世界各國所有的語言文字都囊括進來,可以做到任意一個字元都有其對應的數字標誌位,不管是英文、中文、拉丁文等等。但是每個事物的出現除了有優點之外還有它的不足之處。誠然Unicode字符集固然一勞永逸的解決了字元編碼繁多互動不方便的問題,但它那一個字元就需要四個位元組來儲存的要求對於電腦儲存和傳輸效率帶來了一定的壓力,尤其是在當時早起電腦硬體還不發達的時候,硬碟儲存和位元組傳輸頻寬都是非常緊缺的資源,無法消耗起一個字元就得用四個位元組表示的代價。

UTF字元編碼:

UTF的的全程是“Unicode Transformation Format”.主要有UTF-8、UTFF-16、UFT-32。其中UTF-8並不是單子固定的位元組長度表示字元的,而是一種可變長的編碼方式。它可以表示Unicode字符集中的任意字元。UTF-8編碼採用1至4個位元組來表示一個字元,根據字元的不同範圍來確定編碼長度。 UTF-8的出現將大大解決我們上述提到的問題。

1. 融合性:UTF-8能夠適應各種語言的字元編碼需求,它可以表示世界上幾乎所有的字元,包括亞洲文字、西方文字和特殊字元等。

2. 相容性:UTF-8是ASCII編碼的超集,即ASCII編碼中的字元在UTF-8中可以用相同的編碼表示,這樣就實現了與ASCII編碼的相容性。

3. 節省空間:相比其他的Unicode編碼方式,UTF-8能夠使用更少的位元組來表示相同的字元,特別是對於ASCII字元,只需要1個位元組就可以表示,這樣可以節省儲存空間。

4. 相容舊系統:由於UTF-8的相容性和節省空間的特點,很多舊系統和軟體也可以直接支援UTF-8編碼,而不需要進行大規模的改造。

5. 國際化支援:UTF-8的出現使得國際化軟體和網站得以普及,使用者可以使用自己的母語來進行輸入和交流,有效地促進了不同語言和文化之間的交流與合作。

文章到了這裡,似乎已經講清楚了不同的字符集合編碼格式之間的關係(對於字符集合字元編碼文章不做深入探究,只做簡單介紹引出問題),但是並沒有提及專案中遇到的問題,那麼下面我將結合專案中遇到的問題來進一步探討。

相關文章