Unicode 文字列がテキストファイルや他のストレージに書き出されるとき、その文字列にある Unicode スカラは Unicode に定義された方式でエンコードされます。各形式は、コード単位という小さなまとまりで文字列をエンコードします。(8 ビットコード単位で文字列をエンコードする)UTF-8 エンコード方式、(16 ビットコード単位で文字列をエンコードする)UTF-16 エンコード方式、および(32 ビットコード単位で文字列をエンコードする)UTF-32 エンコード方式が含まれています。
Swift には、文字列の Unicode 表現にアクセスする方法がいくつかあります。for
–in
文で文字列内を繰り返し処理して、Unicode 拡張書記素クラスタとして個々の Character
値にアクセスすることができます。この処理は Working with Characters で説明されています。
あるいは、3 つの Unicode 準拠表現のうち 1 つで String
値にアクセスします。
- UTF-8 コード単位のコレクション(文字列の
utf8
プロパティでアクセス) - UTF-16 コード単位のコレクション(文字列の
utf16
プロパティでアクセス) - UTF-21 Unicode スカラ値、文字列の UTF-32 エンコード方式に相当(文字列の
unicodeScalars
プロパティでアクセス)
以下の各例で、D
、o
、g
、‼
(DOUBLE EXCLAMATION MARK
または Unicode スカラ U+203C
)および 🐶
(DOG FACE
または Unicode スカラ U+1F436
)で構成される文字列を異なる表現で示します。
let dogString = "Dog‼🐶"
UTF-8 表現
utf8
プロパティを繰り返し処理して String
の UTF-8 表現にアクセスすることができます。このプロパティは String.UTF8View
型で、文字列の UTF-8 表現のバイトである符号無し 8 ビット (UInt8
) 値のコレクションです。

for codeUnit in dogString.utf8 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 226 128 188 240 159 144 182
この例では、初めの 3 つの codeUnit
数値 (68
、111
、103
) で文字 D
、o
、g
を表現しており、これらの UTF-8 表現 は ASCII 表現と同じです。次の 3 つの codeUnit
数値 (226
、128
、188
) は、DOUBLE EXCLAMATION MARK
文字の 3 バイト UTF-8 表現です。最後の 4 つの codeUnit
値 (240
、159
、144
、182
) は、DOG FACE
文字の 4 バイト UTF-8 表現です。
UTF-16 表現
utf16
プロパティを繰り返し処理して String
の UTF-16 表現にアクセスすることができます。このプロパティは String.UTF16View
型で、文字列の UTF-16 表現の 16 ビットコード単位である符号無し 16 ビット (UInt16
) 値のコレクションです。

for codeUnit in dogString.utf16 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 8252 55357 56374
初めの 3 つの codeUnit
数値 (68
、111
、103
) で文字 D
、o
、g
を表現しており、これらの UTF-16 コード単位は(Unicode スカラが ASCII 文字を表現しているため)文字列の UTF-8 表現と同じ値になります。
4 番目の codeUnit
数値 (88252
) は 16 進数値 203C
と等しく、DOUBLE EXCLAMATION MARK
文字を Unicode スカラ U+203C
で表現しています。この文字は UTF-16 で 1 つのコード単位として表現することができます。
5 番目と 6 番目の codeUnit
値 (55357
と 56374
) は、DOG FACE
文字の UTF-16 サロゲートペア表現です。これらの値は、U+D83D
(数値 55357
)が上位サロゲート値で、U+DC36
(数値 56374)が下位サロゲート値です。
Unicode スカラ表現
unicodeScalars
プロパティを繰り返し処理して String
値の Unicode スカラ表現にアクセスすることができます。このプロパティは UnicodeScalarView
型で、UnicodeScalar
型の値のコレクションです。
各 UnicodeScalar
は、UInt32
値で表現されるスカラの 21 ビット値を返す value
プロパティを持っています。

for scalar in dogString.unicodeScalars {
print("\(scalar.value) ", terminator: "")
}
print("")
// 68 111 103 8252 128054
初めの 3 つの UnicodeScalar
値 (68
、111
、103
) で文字 D
、o
、g
を表現しています。
4 番目の codeUnit
数値 (8252
) は 16 進数値 203C
と等しく、DOUBLE EXCLAMATION MARK
文字を Unicode スカラ U+203C
で表現しています。
5 番目で、最後の UnicodeScalar
値 (128054
) は 16 進数値 1F436
と等しく、DOG FACE
文字を Unicode スカラ U+1F436
で表現しています。
value
プロパティを利用する代わりに、新しい String
値を構築するために、各 UnicodeScalar
値を文字列補間で利用することができます。
for scalar in dogString.unicodeScalars {
print("\(scalar) ")
}
// D
// o
// g
// ‼
// 🐶
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.