30 lines
1.9 KiB
Markdown
30 lines
1.9 KiB
Markdown
# 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.
|