0Pricing
Swift Academy · Урок

Представления кодировок: utf8, utf16, unicodeScalars

Работайте с разными представлениями закодированных данных.

«Представления кодировок: utf8, utf16, unicodeScalars» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Представления кодировки строк

Swift-строка String предоставляет несколько представлений одного и того же текста на разных уровнях: utf8, utf16 и unicodeScalars.

let s = "Hi"
print(Array(s.utf8))
print(Array(s.utf16))

Представление UTF-8

Представление .utf8 показывает строку как последовательность кодовых единиц UTF-8 (байтов). Каждый символ ASCII занимает один байт.

let s = "AB"
for byte in s.utf8 {
    print(byte)
}

Многобайтовый UTF-8

Символы, не относящиеся к ASCII, занимают несколько байтов UTF-8. Буква с диакритическим знаком или emoji разворачивается в несколько кодовых единиц.

let s = "\u{e9}"
print("UTF-8 bytes:", Array(s.utf8))

Представление UTF-16

Представление .utf16 показывает кодовые единицы UTF-16. Большинство распространённых символов занимает одну единицу, а символы за пределами базовой плоскости — две (суррогатную пару).

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 используется некоторыми платформами и программными интерфейсами. Представление .utf16 обеспечивает взаимодействие с ними.

let s = "Hi"
print("UTF-16 count:", s.utf16.count)

Восстановление строки

Строку можно восстановить из байтов UTF-8 с помощью String(decoding:as:), завершив полный цикл преобразования.

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/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Представления кодировок: utf8, utf16, unicodeScalars»?

Работайте с разными представлениями закодированных данных. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Представления кодировок: utf8, utf16, unicodeScalars»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Символы и графемные кластеры
  2. Скалярные значения Unicode и кодовые точки
  3. Подсчёт и перебор символов
  4. Представления кодировок: utf8, utf16, unicodeScalars
← Назад к Swift Academy