一文讀懂字符集 編譯碼

2021-10-10 22:46:51 字數 2152 閱讀 1683

字符集

所謂集合是指作為整體看的一堆「東西」,所以字符集的字面意思就是「一類字元(character)」的集合。字元通常指代類字形單位或符號,包括字母、數字、運算符號、標點符號、其他符號及一些功能性符號。

常見字符集:ascii字符集、gb2312字符集、big5字符集、gbk字符集、gb18030字符集、unicode字符集等,字符集中主要包含了字元與id的對應關係。

編碼&解碼

編碼(encoding)一般指目標資訊從一種形式通過一定的規則轉換為另一種形式的過程。相對於計算機底層來說,所有的資料在儲存與運算時都要使用二進位制數表示(高電平為「1」,低電平為「0」),人類若要與其進行「通訊」,便需要將自身可以識別的字符集轉換為計算機可以識別的「1」和「0」,他們之間的轉換關係(即對映)便是所謂的編碼過程。

解碼(decoding)則是編碼的逆過程。

ascii

ascii (american standard code for information interchange,美國資訊交換標準碼),包括ascii字符集與ascii(編)碼。ascii字符集共128個物件,包括52個英文本母大小寫、10個阿拉伯數字、英文標點及一些控制符。標準ascii 碼也叫基礎ascii碼,使用7 位二進位制數(剩下的1位二進位制為0)來表示128個字元(擴充套件ascii 碼則將每個字元的第8 位用於確定附加的128 個特殊符號字元、外來語字母和圖形符號)。』

ansi

由於許多國家的語言不能使用ascii進行完整的表示,不同的國家和地區則制定了不同的標準,由此產生了gb2312、big5、shift_jis等各自的標準(包含字符集與編碼方式)。這些使用 雙位元組或更多位元組來代表乙個字元的各種ascii延伸,統稱為ansi標準,有時也稱為"mbcs(muilti-bytes character set,多位元組字符集)"。例如,簡體中文系統下,ansi代表gb2312標準;正體中文系統下ansi代表big5標準,日文系統下,ansi代表shift_jis標準。

unicode

但由於不同 ansi標準之間互不相容(例如,無法將簡單的將屬於兩種不同語言的文字,儲存在同一段ansi編碼的文字中),為了解決這些侷限,unicode(又稱統一碼、萬國碼、單一碼)標準(包含字符集與編碼方式)應運而生。它為不同語言中的不同字元設定了唯一的二進位製碼,用以滿足跨語言、跨平台的字元處理需求。

utf-8、utf-16、utf-32等都是unicode字符集常用的「具體」編碼方式(unicode編碼方式只包含一組字元與相應id之間的邏輯對映,並沒有指定**點如何在計算機上儲存)。

utf-8

utf-8(unicode transformation format,8位元)是針對unicode字符集的一種可變長度字元編碼(使用1~4位元組為每個字元編碼),且utf-8編碼是ascii碼的乙個超集,其編碼中單位元組仍與ascii編碼方式相同,使得原來處理ascii字元的軟體無須或只進行少部分修改後,便可繼續使用,也正是由於此原因,使得utf-8編碼方式被廣泛使用。

unicode與utf-8的轉換關係如上圖所示。

utf-16

utf-16(unicode transformation format,16位元)與utf-8都屬於可變長度字元編碼,但好處在於unicode字符集中大部分常用字元都以固定長度的位元組(雙位元組)儲存(其餘字元使用兩個雙位元組進行儲存),不過utf-16卻無法相容於ascii編碼。

utf-32

utf-32(unicode transformation format,32位元)不同於utf-8與utf-16,其是一種固定長度字元編碼,對每乙個unicode字符集中的元素都使用四位元組進行編碼。此種編碼方式空間利用率極低,雖然在進行截斷操作時較為方便,但相對於utf-8與utf-16並沒有較大優勢。

總結

具體的unicode字元對應關係,可以查詢unicode.org,或者中日韓漢字編碼表。

一文讀懂Nginx

問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...

一文讀懂SpringMVC

主要講的是dispatcherservlet這個類 ioc其實是乙個map,工程啟動後掃瞄路徑,根據類的全限定名建立bean 問 怎麼根據路徑找到方法?map還存key為 aaa value為該controller例項 問 autowired原理?自定義註解,在載入的時候,掃瞄controller層...

堆疊 一文讀懂

堆疊 stack 是一種先進後出的 操作受限的線性表,也可以直接稱為棧。可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出 last in first out 的原則。因此 棧 ...