Unicode 是一個國際標(biāo)準(zhǔn),用于文本的編碼和表示。 它使您可以用標(biāo)準(zhǔn)格式表示來自任意語言幾乎所有的字符,并能夠?qū)ξ谋疚募蚓W(wǎng)頁這樣的外部資源中的字符進(jìn)行讀寫操作。
Swift 的字符串和字符類型是完全兼容 Unicode 標(biāo)準(zhǔn)的,它支持如下所述的一系列不同的 Unicode 編碼。
Unicode 中每一個字符都可以被解釋為一個或多個 unicode 標(biāo)量。 字符的 unicode 標(biāo)量是一個唯一的21位數(shù)字(和名稱),例如U+0061表示小寫的拉丁字母A ("a"),U+1F425表示小雞表情 ("?")
當(dāng) Unicode 字符串被寫進(jìn)文本文件或其他存儲結(jié)構(gòu)當(dāng)中,這些 unicode 標(biāo)量將會按照 Unicode 定義的集中格式之一進(jìn)行編碼。其包括UTF-8(以8位代碼單元進(jìn)行編碼) 和UTF-16(以16位代碼單元進(jìn)行編碼)。
Swift 提供了幾種不同的方式來訪問字符串的 Unicode 表示。
您可以利用for-in來對字符串進(jìn)行遍歷,從而以 Unicode 字符的方式訪問每一個字符值。 該過程在 使用字符 中進(jìn)行了描述。
另外,能夠以其他三種 Unicode 兼容的方式訪問字符串的值:
utf8屬性進(jìn)行訪問)utf16屬性進(jìn)行訪問)unicodeScalars屬性進(jìn)行訪問)
下面由D``o``g``!和?(DOG FACE,Unicode 標(biāo)量為U+1F436)組成的字符串中的每一個字符代表著一種不同的表示:
let dogString = "Dog!?"
您可以通過遍歷字符串的utf8屬性來訪問它的UTF-8表示。 其為UTF8View類型的屬性,UTF8View是無符號8位 (UInt8) 值的集合,每一個UInt8值都是一個字符的 UTF-8 表示:
for codeUnit in dogString.utf8 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 240 159 144 182
上面的例子中,前四個10進(jìn)制代碼單元值 (68, 111, 103, 33) 代表了字符D o g和!,它們的 UTF-8 表示與 ASCII 表示相同。 后四個代碼單元值 (240, 159, 144, 182) 是DOG FACE的4字節(jié) UTF-8 表示。
您可以通過遍歷字符串的utf16屬性來訪問它的UTF-16表示。 其為UTF16View類型的屬性,UTF16View是無符號16位 (UInt16) 值的集合,每一個UInt16都是一個字符的 UTF-16 表示:
for codeUnit in dogString.utf16 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 55357 56374
同樣,前四個代碼單元值 (68, 111, 103, 33) 代表了字符D o g和!,它們的 UTF-16 代碼單元和 UTF-8 完全相同。
第五和第六個代碼單元值 (55357 和 56374) 是DOG FACE字符的UTF-16 表示。 第一個值為U+D83D(十進(jìn)制值為 55357),第二個值為U+DC36(十進(jìn)制值為 56374)。
您可以通過遍歷字符串的unicodeScalars屬性來訪問它的 Unicode 標(biāo)量表示。 其為UnicodeScalarView類型的屬性,UnicodeScalarView是UnicodeScalar的集合。 UnicodeScalar是21位的 Unicode 代碼點(diǎn)。