Bug 12313 - Ошибка кодировки в именах файлов
Summary: Ошибка кодировки в именах файлов
Status: REOPENED
Alias: None
Product: Sisyphus
Classification: Development
Component: unzip (show other bugs)
Version: unstable
Hardware: all Linux
: P2 blocker
Assignee: arei@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
: 43687 (view as bug list)
Depends on: 4871
Blocks: 12100 12418
  Show dependency tree
 
Reported: 2007-07-12 12:38 MSD by Andrey Cherepanov
Modified: 2023-08-08 15:33 MSK (History)
10 users (show)

See Also:


Attachments
Патч, использующий natspec и корректный буфер (13.55 KB, patch)
2007-07-30 12:37 MSD, Vitaly Lipatov
no flags Details | Diff
Патч к спеку для сборки с новым патчем natspec (1.30 KB, patch)
2007-07-30 12:39 MSD, Vitaly Lipatov
no flags Details | Diff
пример файла (369.49 KB, application/octet-stream)
2007-12-13 12:10 MSK, Anton V. Boyarshinov
no flags Details
Пример (архив с wormhole) (258 bytes, application/zip)
2023-08-08 15:08 MSK, Artem Varaksa
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Cherepanov 2007-07-12 12:38:46 MSD
Локаль: utf-8, ALT Linux 4.0 Desktop.

Кириллические имена файлов в zip-архивах показываются квадратиками, 
аргумент -O не работает. Раньше всё работало без проблем.
Comment 1 AEN 2007-07-12 12:43:21 MSD
(In reply to comment #0)
>  Раньше всё работало без проблем.
Раньше -- это когда? В Desktop работает? Если нет -- вешайте на Desktop. 
Comment 2 Eugene Ostapets 2007-07-12 12:54:42 MSD
Два года назад патч был еще живой, нтересно, когда он отвалился...
Буду копать, но код там бредовый... Жутко бредовый...
Comment 3 Andrey Cherepanov 2007-07-12 12:55:55 MSD
Раньше - это месяц назад в Сизифе. Сейчас не работает ни в Сизифе, ни в 
Desktop
Comment 4 AEN 2007-07-29 14:12:55 MSD
(In reply to comment #3)
> Раньше - это месяц назад в Сизифе. Сейчас не работает ни в Сизифе, ни в 
> Desktop

Это действительно блокер.
Евгений, можно исправить быстро?
Comment 5 Vitaly Lipatov 2007-07-30 11:04:00 MSD
Да, при LANG=ru_RU.UTF8
выводит в консоль в CP866.
А вот никакого ключа -O  я не нашёл у unzip.
Comment 6 Andrey Cherepanov 2007-07-30 11:43:21 MSD
[cas@cas ~]$ unzip -v | grep Maint
UnZip 5.52 of 28 February 2005, by Info-ZIP.  Maintained by C. Spieler.  Send
[cas@cas ~]$ unzip -h | grep CHARSET
  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
  -I CHARSET  specify a character encoding for UNIX and other archives
Comment 7 Vitaly Lipatov 2007-07-30 12:37:50 MSD
Created attachment 2119 [details]
Патч, использующий natspec и корректный буфер

Проблема старого патча была в следующем:
- в нём использовалась таблица из нескольких кодировок, в которой не было UTF8
- в качестве размера буфера использовалась длина исходной строки, что делало
невозможным перекодирование из CP866 в UTF-8 (строка не влезала)
Comment 8 Vitaly Lipatov 2007-07-30 12:39:48 MSD
Created attachment 2120 [details]
Патч к спеку для сборки с новым патчем natspec

Если нужно, я могу и залить пакет. Было бы отлично, если кто-то ещё проверит.
Comment 9 Andrey Cherepanov 2007-07-30 16:13:35 MSD
(In reply to comment #8)
> Created an attachment (id=2120) [edit]
> Патч к спеку для сборки с новым патчем natspec
> 
> Если нужно, я могу и залить пакет. Было бы отлично, если кто-то ещё 
проверит.

Твой пакет работает. Из консоли и в file-roller. А вот в Ark имя файла 
обрезается. Тут уж надо KDE патчить.
Comment 10 Vitaly Lipatov 2007-07-30 18:11:49 MSD
А какой длины обрезаемые имена?
Возможно в unzip стоит увеличить лимит, если там ошибка в условиях, то там 
может быть 255 как предел (соотв. 127 символов)

P.S.
Мне ещё и Ark патчить? Я могу :) Если меня не заставят потом патч 
пропихивать :)
Comment 11 Andrey Cherepanov 2007-07-30 18:31:43 MSD
> Мне ещё и Ark патчить? Я могу :) Если меня не заставят потом патч 
> пропихивать :)

См. https://bugzilla.altlinux.org/show_bug.cgi?id=12418 и пиши Zerg. В 
исходниках идут жестокие хаки вывода и, похоже, строка неправильно 
преобразуется.

Comment 12 Michael Shigorin 2007-08-13 20:00:18 MSD
Проверено на .zip "имени winrar" и "имени winxp" (правда, не совсем понятно, не
причастен ли и тут случайно winrar) -- замечательно работает.
Comment 13 Anton V. Boyarshinov 2007-12-13 12:08:38 MSK
не работает на zip имени gmail
alt2 работает
alt4 нет
Comment 14 Anton V. Boyarshinov 2007-12-13 12:10:48 MSK
Created attachment 2326 [details]
пример файла
Comment 15 Eugene Ostapets 2007-12-13 12:46:15 MSK
Проблема с русскими именами в zip принципиально нерешаема! То, что у нас сделано
- это грязный хак, а zip имени gmail нарушает даже те размытые стандарты,
которые есть на кодирование не-ascii символов. Теоретически можно написать
аутоугадав на базе enca или чего-то подобного, но это сложно и я за это не
возьмусь. Давайте закончим это тем, что ни в одной операционной системе, ни с
одним вариантом архиватора(консольного или графического) нельзя гарантированно
получить русские имена из архива. 

Для данного архива комманда unzip -O utf8 может быть использована
Comment 16 Michael Shigorin 2008-01-22 20:13:55 MSK
2 eostapets: BTW видел
https://bugzilla.altlinux.org/show_bug.cgi?id=4871#c12
?
Comment 17 Vitaly Lipatov 2008-01-23 01:43:25 MSK
Не знаю, не знаю. Дописать проверку, что имя в архиве написано в utf8 - легко. 
И "архивы имени gmail" будут тоже нормально открываться. Они так сделали, 
потому что 
а) у них Linux
б) другого варианта на будущее - нет
Правда смысла с ничем не совместимом решении нет...

А проблема с русскими именами решаема и решена практически.
Comment 18 Michael Shigorin 2008-10-08 21:59:28 MSD
https://bugzilla.altlinux.org/show_bug.cgi?id=4871#c15
Comment 19 Artem Varaksa 2023-08-08 14:00:54 MSK
Проблема с кодировкой названий файлов в zip имени gmail (https://bugzilla.altlinux.org/attachment.cgi?id=2326) воспроизводится:

> $ unzip 12313-gmail.zip
> Archive:  12313-gmail.zip
>   inflating: ╨║╨╛╨╗╨╗╨╡╨║╤В╨╕╨▓╨б╨б.odt  
>   inflating: ╨╗╨╕╤З╨╜╨╛╤Б╤В╤М╨б╨б.odt  
>   inflating: ╨╜╨░╤Б╨╗╨╡╨┤╤Б╤В╨▓╨╡╨╜╨╜╨╛╤Б╤В╤М╨б╨б.odt  
>   inflating: ╨┐╨░╨╝╤П╤В╤М╨б╨б.odt  
>   inflating: ╨┐╨╡╨┤╨╛╨╗╨╛╨│╨╕╤П╨б╨б.odt  
>   inflating: ╨┐╨╛╨╜╤П╤В╨╕╨╡╨б╨б.odt  
>   inflating: ╤А╨╡╨▒╨╡╨╜╨╛╨║╨б╨б.odt  
>   inflating: ╤А╨╡╨║╨░╨┐╨╕╤В╤Г╨╗╤П╤Ж╨╕╤П╨б╨б.odt  
>   inflating: ╨б╨╛╨╖╨╜╨░╨╜╨╕╨╡╨б╨б.odt  
>   inflating: ╤Б╨╛╤Ж╨╕╨░╨╗╤М╨╜╨░╤П╤Б╨╕╤В╤Г╨░╤Ж╨╕╤П╤А╨░╨╖╨▓╨╕╤В╨╕╤П╨б╨б.odt  
>   inflating: ╤Б╤А╨╡╨┤╨░╨б╨б.odt

Как описано в https://bugzilla.altlinux.org/show_bug.cgi?id=12313#c15, `-O utf8` помогает:

> $ unzip -O utf8 12313-gmail.zip
> Archive:  12313-gmail.zip
>   inflating: коллективСС.odt  
>   inflating: личностьСС.odt  
>   inflating: наследственностьСС.odt  
>   inflating: памятьСС.odt    
>   inflating: педологияСС.odt  
>   inflating: понятиеСС.odt  
>   inflating: ребенокСС.odt  
>   inflating: рекапитуляцияСС.odt  
>   inflating: СознаниеСС.odt  
>   inflating: социальнаяситуацияразвитияСС.odt  
>   inflating: средаСС.odt 

Воспроизводится на виртуальных машинах:

[p10] unzip-6.0-alt5.x86_64
kworkstation-10.1-x86-64
education-10.1-x86-64
education-10.1-x86-64-kde
workstation-10.1-x86-64
server-10.1-x86-64

[sisyphus] unzip-6.0-alt5.x86_64
kworkstation-10.1-x86-64
education-10.1-x86-64
education-10.1-x86-64-kde
workstation-10.1-x86-64
server-10.1-x86-64
Comment 20 Artem Varaksa 2023-08-08 14:10:36 MSK
> $ locale
> LANG=ru_RU.UTF-8
> LC_CTYPE="ru_RU.UTF-8"
> LC_NUMERIC="ru_RU.UTF-8"
> LC_TIME="ru_RU.UTF-8"
> LC_COLLATE="ru_RU.UTF-8"
> LC_MONETARY="ru_RU.UTF-8"
> LC_MESSAGES="ru_RU.UTF-8"
> LC_PAPER="ru_RU.UTF-8"
> LC_NAME="ru_RU.UTF-8"
> LC_ADDRESS="ru_RU.UTF-8"
> LC_TELEPHONE="ru_RU.UTF-8"
> LC_MEASUREMENT="ru_RU.UTF-8"
> LC_IDENTIFICATION="ru_RU.UTF-8"
> LC_ALL=
Comment 21 Sergey V Turchin 2023-08-08 14:14:07 MSK
(Ответ для Artem Varaksa на комментарий #19)
> Проблема с кодировкой названий файлов в zip имени gmail
Кто сформировал такой .zip и как сформировать такой самостоятельно?

Если в нём не указало, что имена файлов юникодные, то он должен через natspec определить cp1251 и перекодировать из неё в кодировку локали.

Т.е. сперва надо убедиться, что .zip сформирован корректно.
Comment 22 Artem Varaksa 2023-08-08 15:08:22 MSK
Created attachment 14015 [details]
Пример (архив с wormhole)

(Ответ для Sergey V Turchin на комментарий #21)
> (Ответ для Artem Varaksa на комментарий #19)
> > Проблема с кодировкой названий файлов в zip имени gmail
> Кто сформировал такой .zip и как сформировать такой самостоятельно?

Это zip из вложения в этой ошибке, добавленный в https://bugzilla.altlinux.org/show_bug.cgi?id=12313#c14 (также см. предыдущий комментарий c13).

> $ zipinfo 12313-gmail.zip 
> Archive:  12313-gmail.zip
> Zip file size: 378359 bytes, number of entries: 11
> -rw----     2.0 fat    10940 bl defN 07-Dec-13 01:03 ╨║╨╛╨╗╨╗╨╡╨║╤В╨╕╨▓╨б╨б.odt
> [...]
> 11 files, 391320 bytes uncompressed, 376693 bytes compressed:  3.7%



Другой пример
=============

Такая же проблема происходит с zip имени https://wormhole.app (пример zip добавлен вложением):

1. $ touch тест1.txt && touch тест2.txt
2. https://wormhole.app > Select files to send > выбрать 2 файла.
3. Открыть отображаемую ссылку > Download all files.
4. Выполнить команду вида:

> $ unzip "Wormhole ABCDE.zip"
> Archive:  Wormhole ABCDE.zip
>  extracting: ╤В╨╡╤Б╤В1.txt  
>  extracting: ╤В╨╡╤Б╤В2.txt

> $ unzip -O utf8 "Wormhole ABCDE.zip"
> Archive:  Wormhole ABCDE.zip
>  extracting: тест1.txt           
>  extracting: тест2.txt

> $ zipinfo "Wormhole ABCDE.zip"
> Archive:  Wormhole ABCDE.zip
> Zip file size: 258 bytes, number of entries: 2
> -rw----     2.0 fat        0 b- stor 23-Aug-08 14:25 ╤В╨╡╤Б╤В1.txt
> -rw----     2.0 fat        0 b- stor 23-Aug-08 14:25 ╤В╨╡╤Б╤В2.txt
> 2 files, 0 bytes uncompressed, 0 bytes compressed:  0.0%



Дополнительно
=============

При создании архива через Engrampa (mate-file-archiver) наблюдается интересное поведение - похоже, корректное, но 'continuing with "central" filename version' не отображается в архивах из https://bugzilla.altlinux.org/43687, https://bugzilla.altlinux.org/21137 - в архивов из тех ошибок сразу используются правильные имена.

1. $ touch тест1.txt && touch тест2.txt
2. Используя графический интерфейс, открыть Стандартные/Прочие/Инструменты > Менеджер архивов Engrampa.
3. Выбрать Архив > Создать > ввести имя test.zip > Создать.
4. Выбрать Правка > Добавить файлы > выбрать тест1.txt, тест2.txt > Добавить.
5. Выполнить: 

> $ rm -fv тест*; unzip test.zip; ls -l | grep тест
> удалён 'тест1.txt'
> удалён 'тест2.txt'
> Archive:  test.zip
> тест1.txt:  mismatching "local" filename (тест1.txt),
>          continuing with "central" filename version
>  extracting: тест1.txt           
> тест2.txt:  mismatching "local" filename (тест2.txt),
>          continuing with "central" filename version
>  extracting: тест2.txt
> -rw-r--r-- 1 test test      0 янв  1 12:34 тест1.txt
> -rw-r--r-- 1 test test      0 янв  1 12:34 тест2.txt
Comment 23 Sergey V Turchin 2023-08-08 15:20:28 MSK
(Ответ для Artem Varaksa на комментарий #22)
> Такая же проблема происходит с zip имени https://wormhole.app
А как вы определили, что он формирует корректный zip-файл? У меня по главной странице сайта уже есть сомнения.
Comment 24 Artem Varaksa 2023-08-08 15:21:54 MSK
Для справки, аналогичная проблема воспроизводится с архивом с mail.yandex.ru: https://bugzilla.altlinux.org/43687 (Неверное отображение имён файлов в кирилице из zip архива).

Возможно, эти ошибки стоит объединить.
Comment 25 Sergey V Turchin 2023-08-08 15:26:37 MSK
Домклик, например, делает zip-ы, которые нормально отображаются.
Comment 26 Sergey V Turchin 2023-08-08 15:31:59 MSK
(Ответ для Artem Varaksa на комментарий #24)
> mail.yandex.ru
И у них может быть кривой.

> Возможно, эти ошибки стоит объединить.
Думаю, да.
Comment 27 Artem Varaksa 2023-08-08 15:33:50 MSK
*** Bug 43687 has been marked as a duplicate of this bug. ***