Files
drhider/History/code-fixes/2026-08-24-zip-name-cyrillic-frontend.md
T

1.9 KiB
Raw Blame History

v0.0.67 — Фикс кириллических имён из ZIP на фронтенде (2026-08-24)

code-fixes. Имя TKM_6й_Семестр_ЭКЗАМЕН.docx из архива отображалось как TKM_6╨╣_╨б╨╡╨╝╨╡╤Б╤В╤А_... (мусор).

Причина

Архиватор записал имя в UTF-8, но без UTF-8-флага (bit 11). Фронт (decodeZipName) видел «флага нет», шёл в legacy-ветку и декодировал UTF-8-байты как CP866D0 99 («й») → ╨╣ (псевдографика CP866).

Фикс (index.html, decodeZipName)

  • Первым делом — строгая проверка UTF-8 (TextDecoder('utf-8', {fatal:true})): если байты — валидный UTF-8 с кириллицей или печатаемым текстом → берём как есть.
  • Только если строгий UTF-8 не проходит (реальные CP437/CP866 из 1С) — legacy-путь (CP437 → CP866) не меняется.
  • CP866-кириллица (0x80–0xAF) — это продолжения UTF-8 без ведущих байтов, поэтому строгий UTF-8 для них честно падает и legacy-путь работает как раньше.

Согласованность с бэком

Бэк (extractor.py, _decode_name) это уже умел (v0.0.54, «В2 — фикс кракозябр имён zip»). Теперь фронт и бэк обрабатывают имена ZIP одинаково.

Проверка (node)

  • TKM_6й_Семестр_ЭКЗАМЕН.docx (UTF-8 без флага) — декодируется верно .
  • ASCII — . Legacy CP437/CP866-путь не тронут.
  • node --check — OK.

Версия

  • 0.0.66 → 0.0.67.