エンコーディングビュー:utf8、utf16、unicodeScalars
異なるエンコード表現を扱います。
「エンコーディングビュー:utf8、utf16、unicodeScalars」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
文字列のエンコーディングビュー
SwiftのStringは、同じテキストを異なるレベルで扱う複数のビューを提供します。utf8、utf16、unicodeScalarsです。
let s = "Hi"
print(Array(s.utf8))
print(Array(s.utf16))utf8ビュー
.utf8ビューでは、文字列をUTF-8のコード単位(バイト)のシーケンスとして扱えます。ASCII文字はそれぞれ1バイトです。
let s = "AB"
for byte in s.utf8 {
print(byte)
}複数バイトのUTF-8
ASCII以外の文字は、複数のUTF-8バイトを使用します。アクセント付き文字や絵文字は、複数のコード単位に展開されます。
let s = "\u{e9}"
print("UTF-8 bytes:", Array(s.utf8))utf16ビュー
.utf16ビューでは、UTF-16のコード単位を扱えます。一般的な文字の多くは1単位ですが、基本多言語面より後の文字は2単位(サロゲートペア)を使用します。
let s = "A\u{1F600}"
print("UTF-16 units:", Array(s.utf16))unicodeScalarsビュー
.unicodeScalarsビューでは、文字と生のバイトの中間に位置する、内部のコードポイントを扱えます。
let s = "Hi\u{1F600}"
for scalar in s.unicodeScalars {
print(scalar.value)
}ビューを比較する
エンコーディングによって文字の表現に必要なコード単位の数が異なるため、同じ文字列でもビューごとに異なる数になります。
let s = "\u{1F600}"
print("characters:", s.count)
print("scalars:", s.unicodeScalars.count)
print("utf16:", s.utf16.count)
print("utf8:", s.utf8.count)UTF-8を使う理由
UTF-8はファイルやネットワークで主流のエンコーディングです。.utf8ビューを使うと、まさにそのバイト列を生成できます。
let message = "OK"
let bytes = Array(message.utf8)
print(bytes)UTF-16を使う理由
UTF-16は一部のプラットフォームやAPIで使用されています。.utf16ビューを使うと、それらと相互運用できます。
let s = "Hi"
print("UTF-16 count:", s.utf16.count)文字列を再構築する
String(decoding:as:)を使ってUTF-8バイトから文字列を再構築し、完全なラウンドトリップを実現できます。
let bytes: [UInt8] = Array("Swift".utf8)
let restored = String(decoding: bytes, as: UTF8.self)
print(restored)バイト数と文字数を比較する
ASCII以外のテキストでは、バイト長と文字数が異なります。表示と保存のどちらを目的とするかに応じて、タスクに合ったビューを選んでください。
let s = "caf\u{e9}"
print("Characters:", s.count)
print("UTF-8 bytes:", s.utf8.count)適切なビューを選ぶ
表示の処理には文字、Unicodeの分析にはスカラー、エンコーディングや保存、相互運用にはutf8またはutf16を使います。
let s = "A\u{e9}\u{1F600}"
print("chars:", s.count, "scalars:", s.unicodeScalars.count, "utf8:", s.utf8.count)確認問題
utf8ビューに何が含まれるか思い出してください。
まとめ: エンコーディングビュー
Stringは同じテキストに対するutf8、utf16、unicodeScalarsのビューを提供すること、エンコーディングごとにコード単位のサイズが異なるためビューごとの数も異なること、そして表示、分析、保存やネットワーク通信のためのエンコーディングのどれが必要かに応じてビューを選ぶことを学びました。
let s = "Hi\u{1F600}"
print("chars:", s.count, "utf8:", s.utf8.count, "utf16:", s.utf16.count)よくある質問
「エンコーディングビュー:utf8、utf16、unicodeScalars」レッスンは無料ですか?
はい。「エンコーディングビュー:utf8、utf16、unicodeScalars」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「エンコーディングビュー:utf8、utf16、unicodeScalars」で何を学びますか?
異なるエンコード表現を扱います。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「エンコーディングビュー:utf8、utf16、unicodeScalars」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 文字と書記素クラスタ
- Unicodeスカラーとコードポイント
- 文字のカウントと反復処理
- エンコーディングビュー:utf8、utf16、unicodeScalars