本文来自于疯子们的开源图书

Unicode是一种用于编码和表示文本的国际标准。它可以使你能够用一种标准化的方式表示任何语言中的几乎任何字符,同时允许从外部来源(文本文件或者网页)中读取和写入这些字符。

Swift的String和Character类型完全符合Unicode标准。他们支持不同种类的Unicode编码,下面有详细的描述:

Unicode术语

 

字符串的Unicode编码

Swift提供了几种不同的方式来访问字符串的Unicode表示。

你可以使用for-in语句遍历一个字符串,来访问它的每个字符值(作为Unicode字符)。这个过程在字符处理一章有详细的介绍。

也可以通过下面三种与Unicode兼容的表示来访问一个字符串:

  • 一个由UTF-8编码单元构成的集合(通过字符串的utf8属性来访问)

  • 一个由UTF-16编码单元构成的集合(通过字符串的utf16属性来访问)

  • 一个由21位的Unicode标量值(通过字符串的unicodeScalars属性来访问)

接下来的例子,展示了由字符D,o,g,!,构成的字符串的几种不同的表示(DOG FACE,或者是Unicode 标量 U+1F436)。

UTF-8

通过遍历字符串的utf8属性来访问它的UTF-8表示这个属性是UTF8View类型的,由一系列的无符号8位UInt8值构成,每个对应于字符串的UTF-8编码中的一个字节。

在上面的例子中,前四个十进制的codeUnit的值(68,111,103,33)分别代表D,o,g和!,他们的UTF-8编码与ASCII编码是相同的。后四个codeUnit值(240,159,144,182)是DOG FACE(就是那个正方形的方块)字符的四字节UTF-8编码。

UTF-16

Unicode标量