Подробный гайд по проверке параметров кодирования .sketch

Гайд по проверке .sketch: распаковка ZIP, кодировка UTF-8 без BOM, валидация JSON, параметры DEFLATE, sketchtool и чек-лист диагностики.

2026.09.25                  


Подробный гайд по проверке параметров кодирования .sketchПодробный гайд по проверке параметров кодирования .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.

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта