您好,登錄后才能下訂單哦!
本文來自于瘋子們的開源圖書
Unicode是一種用于編碼和表示文本的國際標準。它可以使你能夠用一種標準化的方式表示任何語言中的幾乎任何字符,同時允許從外部來源(文本文件或者網頁)中讀取和寫入這些字符。
Swift的String和Character類型完全符合Unicode標準。他們支持不同種類的Unicode編碼,下面有詳細的描述:
Unicode中的每個字符都可以使用一個或者多個unicode標量來表示。一個unicode標量是一個唯一的21位編碼,來表示一個字符或者某個修飾符,比如U+0061代表小寫字母a("a"),U+1F425代表方塊字符。
當一個Unicode字符串被寫到文本文件或其他外設里面的時候,就會用定義好的Unicode 格式對這些unicode標量進行編碼。每種格式都是使用很小的塊來編碼字符串的,我們稱這些塊為編碼單元。這些格式包括:UTF-8(使用8位的編碼單元來編碼字符串),UTF-16(使用16位編碼單元編碼字符串)。
Swift提供了幾種不同的方式來訪問字符串的Unicode表示。
你可以使用for-in語句遍歷一個字符串,來訪問它的每個字符值(作為Unicode字符)。這個過程在字符處理一節(jié)有詳細的介紹。
也可以通過下面三種與Unicode兼容的表示來訪問一個字符串:
一個由UTF-8編碼單元構成的集合(通過字符串的utf8屬性來訪問)
一個由UTF-16編碼單元構成的集合(通過字符串的utf16屬性來訪問)
一個由21位的Unicode標量值(通過字符串的unicodeScalars屬性來訪問)
接下來的例子,展示了由字符D,o,g,!,構成的字符串的幾種不同的表示(DOG FACE,或者是Unicode 標量 U+1F436)。
通過遍歷字符串的utf8屬性來訪問它的UTF-8表示。這個屬性是UTF8View類型的,由一系列的無符號8位UInt8值構成,每個對應于字符串的UTF-8編碼中的一個字節(jié)。
在上面的例子中,前四個十進制的codeUnit的值(68,111,103,33)分別代表D,o,g和!,他們的UTF-8編碼與ASCII編碼是相同的。后四個codeUnit值(240,159,144,182)是DOG FACE(就是那個正方形的方塊)字符的四字節(jié)UTF-8編碼。
通過遍歷String的utf16屬性可以獲得他的UTF-16表示。這個屬性是UTF16View,一個多個無符號16位UInt16值構成的序列,其中每個UInt16代表了字符串的UTF-16表示中的一個16位編碼單元
前四個codeUnit值(68,111,103,33)表示字符D,o,g和!,他們的UTF-16編碼單元與字符串的UTF-8表示有相同的值。
第五個和第六個codeUnit值(55357和56374)表示的是方塊字符。這些值是頭代表值U+D83D(十進制的55357)和尾代表值U+DC36(十進制的56374)。
可以通過遍歷String的屬性unicodeScalars屬性值來獲得他的Unicode標量值。這個屬性UnicodeScalarView(由一系列的UnicodeScalar值構成)類型的。
每個UnicodeScalar都有一個value屬性值,它返回一個UInt32類型的21位值。
前四個UnicodeScalar值(68,111,103,33)的value屬性再一次表示了字符D,o,g和!.第五個也是最后一個UnicodeScalar的value屬性值是十進制的128054,等同于16進制的1F436,等同于Dog Face字符的Unicode標量U+1F436.
除了查詢他們的value屬性外,每個UnicodeScalar值可以用來構建一個新的String值。比如下面的字符串插入操作:
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。