Ошибка определения кодировки имён файлов в архиве zip

Последние изменения: 24.05.2022

Ошибка определения кодировки.

Причина в самом zip архиве. по стандарту, формат ZIP для хранения путей поддерживает только две кодировки: UTF 8 и IBM437(нет русских символов).

Сейчас, если имена файлов не в UTF 8, то при декодировании их имён используется системная локаль OEM.

То есть, если архив с файлами с русскими именами подготовлен в русской Windows, а распаковывается в английской, то имена файлов искажаются. Такое же искажение происходит при открытии таких файлов в английской Windows в популярных архиваторах: WinZIP, WinRAR, 7-Zip, и др.

И без искажения в русской Windows в этих же архиваторах.

Причём формат ZIP не хранит информацию об оригинальной кодировке имён файлов, только флаг UTF8.

Скорее всего искаженные имена файлов в архиве в кодировке IBM437, не содержащей русских символов.

Имена файлов можно восстановить модифицирующими узлами, например Python, написав скрипт:

""" Get columns from parent datasets """

parent['Name'] = parent.apply(lambda row: row.Name.encode('cp437').decode('cp866'), axis=1)

result = parent

Помогла ли вам статья?