29 lines
951 B
Markdown
29 lines
951 B
Markdown
# DrHider — Cyrillic filenames in ZIP fix (2026-07-07)
|
|
|
|
## Проблема
|
|
Кириллические имена файлов в выходном ZIP отображаются кракозябрами
|
|
(CP437 вместо UTF-8). Содержимое файлов — OK.
|
|
|
|
## Причина
|
|
`zipfile.ZipFile` в режиме записи кодирует имена в CP437.
|
|
Python 3.12 `metadata_encoding='utf-8'` работает **только на чтение**,
|
|
при записи → `ValueError`.
|
|
|
|
## Решение
|
|
Использовать `ZipInfo` с флагом UTF-8 (бит 11 = 0x800):
|
|
|
|
```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`
|
|
- `contracts-flask/deploy/drhider/drhider.py`
|
|
- `contracts-flask/site/services/drhider.py`
|