1.9 KiB
1.9 KiB
v0.0.67 — Фикс кириллических имён из ZIP на фронтенде (2026-08-24)
code-fixes. Имя TKM_6й_Семестр_ЭКЗАМЕН.docx из архива отображалось как
TKM_6╨╣_╨б╨╡╨╝╨╡╤Б╤В╤А_... (мусор).
Причина
Архиватор записал имя в UTF-8, но без UTF-8-флага (bit 11). Фронт (decodeZipName)
видел «флага нет», шёл в legacy-ветку и декодировал UTF-8-байты как CP866 →
D0 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.