Представления кодировок: 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 — локальная установка не требуется.
Все уроки этого курса
- Символы и графемные кластеры
- Скалярные значения Unicode и кодовые точки
- Подсчёт и перебор символов
- Представления кодировок: utf8, utf16, unicodeScalars