0Pricing
Swift Academy · レッスン

エンコーディングビュー: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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 文字と書記素クラスタ
  2. Unicodeスカラーとコードポイント
  3. 文字のカウントと反復処理
  4. エンコーディングビュー:utf8、utf16、unicodeScalars
← Swift Academyに戻る