# DrHider — Cyrillic filenames in ZIP fix (2026-07-07) ## Проблема Кириллические имена файлов в выходном ZIP отображаются кракозябрами (CP437 вместо UTF-8). Содержимое файлов — OK. ## Причина (двойная) 1. **Мультипарт-парсер** в `drhider_server.py` декодирует HTTP-заголовки как `latin-1`, но браузеры/curl шлют имена файлов в UTF-8. Результат — Mojibake. 2. **`_build_zip`** в `drhider.py` — `zipfile.ZipFile` в режиме записи кодирует имена в CP437, флаг UTF-8 не ставится. ## Решение ### Часть 1: мультипарт (drhider_server.py) ```python name = os.path.basename(m.group(1)) try: name = name.encode('latin-1').decode('utf-8') except (UnicodeDecodeError, UnicodeEncodeError): pass ``` ### Часть 2: ZIP (drhider.py) ```python # Было: zf.writestr(fname, content) # Стало: info = zipfile.ZipInfo(fname) info.flag_bits |= 0x800 zf.writestr(info, content) ``` ## Затронутые файлы - ВМ: `/home/naeel/contracts/drhider/drhider.py` → `_build_zip` - ВМ: `/home/naeel/contracts/drhider/drhider_server.py` → multipart parser - `contracts-flask/deploy/drhider/drhider.py` - `contracts-flask/deploy/drhider/drhider_server.py` - `contracts-flask/site/services/drhider.py` ## Важно - `metadata_encoding='utf-8'` НЕ РАБОТАЕТ в Python 3.12.3 на запись - После правки `.py` → `rm -rf __pycache__` перед перезапуском