Подробный гайд по проверке параметров кодирования .sketch
Файл .sketch — это не монолитный бинарный формат, а ZIP-архив, внутри которого лежат данные в формате JSON и сопутствующие бинарные ресурсы (изображения, превью). Поэтому проверка «параметров кодирования» сводится к трём уровням: кодировка символов внутри JSON, корректность самого JSON и параметры ZIP-сжатия.
Что находится внутри .sketch
После распаковки вы увидите примерно такую структуру:
meta.json— метаданные документа (версия Sketch, список страниц, шрифты).document.json— общие данные (стили, ссылки на страницы).user.json— пользовательские настройки (зум, вьюпорт).pages/— по одному JSON-файлу на каждую страницу.images/— исходные растровые изображения.previews/— превью последней открытой страницы.
Шаг 1. Распаковка архива
Самый простой способ — переименовать file.sketch в file.zip и распаковать любым архиватором.
В командной строке macOS/Linux:
unzip document.sketch -d document_unpacked/
Если файл создан в Sketch 43+, внутри будут только JSON и бинарные файлы.
Шаг 2. Проверка кодировки символов
Все JSON-файлы внутри .sketch должны быть в UTF-8 без BOM. Наличие BOM (Byte Order Mark) может привести к ошибкам парсинга в сторонних инструментах.
Как проверить
Через file (macOS/Linux):
file --mime-encoding document_unpacked/document.json
Ожидаемый вывод: utf-8 (или us-ascii, что тоже допустимо).
Проверка на BOM вручную:
hexdump -C document_unpacked/document.json | head -1
Если первые три байта — EF BB BF, это UTF-8 BOM. Sketch обычно не добавляет BOM, но если вы редактировали JSON сторонним редактором, BOM мог появиться.
В редакторе:
Откройте JSON в VS Code, Notepad++ или Sublime Text. В правом нижнем углу будет указана текущая кодировка. Пересохраните файл как UTF-8 without BOM, если обнаружен BOM.
Шаг 3. Валидация JSON
Повреждённый JSON — самая частая причина, по которой .sketch не открывается или не парсится сторонними библиотеками.
Быстрая проверка через jq
jq empty document_unpacked/document.json
Если ошибок нет — JSON синтаксически корректен.
Проверка через Python
import json
with open('document_unpacked/document.json', encoding='utf-8') as f:
data = json.load(f)
print("JSON валиден")
Автоматическая валидация по официальным схемам
Sketch публикует JSON Schema для формата .sketch (пакет @sketch-hq/sketch-file-format).
С его помощью можно программно проверить, соответствует ли JSON ожидаемой структуре:
npm install @sketch-hq/sketch-file-format
Затем используйте библиотеку Ajv или аналогичную для валидации каждого JSON-файла против соответствующей схемы (document, meta, page и т.д.).
Шаг 4. Проверка параметров ZIP-сжатия
Sketch использует стандартный DEFLATE (алгоритм, лежащий в основе zip/gzip). Сторонние генераторы .sketch (например, CLI-Anything) явно указывают compression=ZIP_DEFLATED для совместимости с приложением.
Как проверить метод сжатия
zipinfo -v document.sketch | grep -A2 "compression method"
Или через Python:
import zipfile
with zipfile.ZipFile('document.sketch') as z:
for info in z.infolist():
print(info.filename, info.compress_type)
compress_type == 8 соответствует ZIP_DEFLATED (DEFLATE). Другие значения (например, 0 — без сжатия) могут быть допустимы, но нестандартны.
Уровень сжатия
ZIP не хранит уровень сжатия в метаданных в явном виде. Однако если вы создаёте .sketch программно, можно задать уровень от 0 (без сжатия) до 9 (максимальное сжатие).
Python zipfile поддерживает параметр compresslevel:
zipfile.ZipFile('out.sketch', 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9)
Для проверки «на глаз» ориентируйтесь на размер: если .sketch подозрительно большой при том же содержимом, возможно, сжатие отключено или использован низкий уровень.
Шаг 5. Использование sketchtool (официальный CLI)
Sketch поставляется с утилитой sketchtool, которая позволяет заглянуть внутрь документа без ручной распаковки.
Метаданные:
sketchtool metadata /path/to/document.sketch
Вы получите JSON с версией Sketch, списком страниц и шрифтов.
Полный дамп JSON-структуры:
sketchtool dump /path/to/document.sketch
Это удобно для проверки того, как Sketch сам интерпретирует кодировку и структуру данных.
Чек-лист быстрой диагностики
| Что проверяем | Команда / инструмент | Ожидаемый результат |
|---|---|---|
| Кодировка JSON | file --mime-encoding |
utf-8 (без BOM) |
| Наличие BOM | hexdump -C | head -1 |
Первые байты ≠ EF BB BF |
| Синтаксис JSON | jq empty |
Нет вывода (успех) |
| Схема JSON | Ajv + @sketch-hq/sketch-file-format |
Валидация пройдена |
| Метод сжатия ZIP | zipinfo -v или Python |
ZIP_DEFLATED (тип 8) |
| Метаданные документа | sketchtool metadata |
Корректный JSON |
Распространённые проблемы
- BOM в JSON — возникает после редактирования в «Блокноте» Windows или некоторых редакторах. Решение: пересохранить как UTF-8 без BOM.
- Смешанные кодировки — если часть файлов в UTF-8, а часть в UTF-16, Sketch может отказаться открывать документ. Проверяйте все JSON-файлы, а не только
document.json. - Нестандартное сжатие — некоторые генераторы используют
ZIP_STORED(без сжатия). Файл откроется, но будет занимать больше места. Для совместимости лучше всегда использоватьDEFLATED.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.