Files
contracts-flask/History/drhider-utf8-zip-2026-07-07.md
T
2026-07-07 15:34:36 +04:00

951 B

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):

# Было:
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