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

30 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.