iOS 中的編碼方式詳解(主要講解Unicode)

2021-06-28 16:12:09 字數 1474 閱讀 9216

完全支援 unicode,還替你幹了大部分的重活兒,處理各種語言、各種書寫系統的文字仍然是乙個非常複雜的事情。作為乙個程式設計師,有些事情你應該知道。

這篇文章裡,我會先向你簡單地講一下 unicode 這個標準,然後解釋nsstring是怎麼處理它的,再討論一下你可能會遇到的一些常見問題。

計算機沒法直接處理文字,它只和數字打交道。為了在計算機裡用數字表示文字,我們指定了乙個從字元到數字的對映。這個對映就叫做編碼(encoding)

最有名的乙個字元編碼是 ascii。ascii 碼是 7 位的,它將英文本母,數字 0-9 以及一些標點符號和控制字元對映為 0-127 這些整型。隨後,人們創造了許多不同的 8 位編碼來處理英語以外的其他語言。它們大多都是基於 ascii 編碼的,並且使用了 ascii 沒有使用的第 8 位來編入其它字母、符號甚至是整個字母表(比如西里爾字母和希臘字母)。

當然,這些編碼系統相互之前並不相容,並且,由於 8 位的空間對於歐洲的文字來說都不夠,更不用說全世界的書寫系統了,因此這種不相容是肯定會出現的了。這對於當時基於文字的作業系統來說是很麻煩的,因為那時作業系統只能同時使用一種編碼(也叫做程式碼頁,code page)。如果你在一台機器上寫了一段文字,然後在另一台使用了不同的程式碼頁的機器上開啟,那麼在 128-255 這個範圍內的字元就會顯示錯誤。

諸如中文、日文和韓文的東亞文字又讓情況更加複雜。這些書寫系統裡包含的字元實在是太多了,以至於 8 位的數字所能提供的 256 個位置遠遠不夠。結果呢,人們開發了更加通用的編碼(通常是 16 位的)。當你開始糾結於如何處理乙個位元組裝不下的值時,如何把它儲存到記憶體或者硬碟裡就變得十分關鍵了。這時,就必須再進行第二次對映,以此來確定位元組的順序。而且,最好使用可變長度的編碼而不是固定長度的。請注意,第二次對映其實是另一種形式的「編碼」。我們把這兩個對映都叫做「編碼」很容易造成誤解。這個在下面 utf-8 和 utf-16 的部分裡會再作討論。

現代作業系統都已經不再侷限於只能同時使用一種程式碼頁了,因此只要每個文件都清楚地標明自己使用的是哪種編碼,處理幾十甚至上百種編碼系統儘管很討厭,也完全是有可能的。真正不可能的是在乙個文件裡混合使用多種編碼系統,因此撰寫多語言的文件也不可能了,而正是這一點終結了在 unicode 編碼出現之前,多種編碼混戰的局面。

1987 年,來自幾個大的科技公司(其中包括蘋果和 next)的工程師們開始合作致力於開發一種能在全世界所有書寫系統中通用的字元編碼系統,於 1991 年 10 月發布的 1.0.0 版本的 unicode 標準就是這一努力的成果。

簡單地來說,unicode 標準為世界上幾乎所有的[^1]書寫系統裡所使用的每乙個字元或符號定義了乙個唯一的數字。這個數字叫做碼點(code points),以u+***x這樣的格式寫成,格式裡的***x代表四到六個十六進製制的數。比如,u+0041(十進位制是 65)這個碼點代表拉丁字母表(和 ascii 一致)裡的字母 a;u+1f61b 代表名為「伸出舌頭的臉」的 emoji,也就是

PMP認證知識普及 PMBOK中主要講解哪些內容?

目前pmp考試是以美國專案管理協會編寫的 專案管理知識體系指南 pmbok2012版本為依據,教材主要內容框架如下 領域啟動過程組 規劃過程組 執行過程組 監控過程組 收尾過程組 專案整合管理 4.1制定專案章程 4.2 制定專案管理計畫 4.3指導與管理專案工作 4.4監控專案工作 4.6結束專案...

PMP認證知識普及 PMBOK中主要講解哪些內容?

目前pmp考試是以美國專案管理協會編寫的 專案管理知識體系指南 pmbok2012版本為依據,教材主要內容框架如下 領域啟動過程組 規劃過程組 執行過程組 監控過程組 收尾過程組 專案整合管理 4.1制定專案章程 4.2 制定專案管理計畫 4.3指導與管理專案工作 4.4監控專案工作 4.6結束專案...

ASCII與BCD的理解,主要講解BCD編碼

bcd 即bcd binary coded decimal 簡稱bcd,稱bcd碼或二 十進位制 亦稱二進碼十進數。是一種二進位制的數字編碼形式,用二進位制編碼的十進位制 這種編碼形式利用了四個位元來儲存乙個十進位制的數碼,使二進位制和十進位制之間的轉換得以快捷的進行。這種編碼技巧,最常用於會計系統...