app-arch/unzip и русский в именах файлов (кто как борется?)

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

Аватара пользователя
proDOOMman
Сообщения: 284

app-arch/unzip и русский в именах файлов

Сообщение proDOOMman »

Здравствуйте, господа гентушники!
Долгое время я пытался не обращать внимание на проблему кодировки имен файлов в zip архивах, но больше не могу.
При открытии zip архива, содержащего имена файлов на русском, в итоге получается имя этого файла в кракозябрах.
Самый простой вариант был поставить app-arch/unzip из оверлея rusxmms, но он почему-то не заработал (Program received signal SIGABRT, Aborted.).
Кто как решает эту проблему?
Ubuntu LL x86 on Acer Extensa 5635G
Спасибо сказали:
Аватара пользователя
NekoExMachina
Сообщения: 485
ОС: Кошерная.

Re: app-arch/unzip и русский в именах файлов

Сообщение NekoExMachina »

как костыль можно использовать convmv.
но это именно костыль, а не решение проблемы.
На форуме больше не появляюсь.
Высокопарность и надменность довела.
OpenBSD-current+scrotwm*1 (acer aspire one 531h)
FreeBSD 8.1+kde3*1 (desktop)
FreeBSD 8.1+scrotwm*1 (hp530)
FreeBSD 9.0+dwm*1 (old toshiba satellite)

Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: app-arch/unzip и русский в именах файлов

Сообщение rm_ »

но это именно костыль, а не решение проблемы.

Я бы не был столь категоричен, учитывая что в формате ZIP вообще не прописывается, в какой кодировке в нём хранятся имена файлов, и при этом храниться они могут - в любой.
Спасибо сказали:
Аватара пользователя
proDOOMman
Сообщения: 284

Re: app-arch/unzip и русский в именах файлов

Сообщение proDOOMman »

rm_ писал(а):
20.01.2009 07:55
но это именно костыль, а не решение проблемы.

Я бы не был столь категоричен, учитывая что в формате ZIP вообще не прописывается, в какой кодировке в нём хранятся имена файлов, и при этом храниться они могут - в любой.

Ну теоретически можно же приделать автоматическое определение кодировки через что-то типа enca. Да и чаще всего встречаются архивы с досовской кодировкой 866.
Решение с convmv в принципе устраивает (за неимением ничего лучшего), хотя да, костыль. Со временем наверно надо будет покопаться в unzip от rusxmms, может найду в чем проблема.
Ubuntu LL x86 on Acer Extensa 5635G
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: app-arch/unzip и русский в именах файлов

Сообщение sspphheerraa »

- писать на инглише
на худой конец wine+7zip
Sspphheerraa
Спасибо сказали:
Аватара пользователя
proDOOMman
Сообщения: 284

Re: app-arch/unzip и русский в именах файлов

Сообщение proDOOMman »

sspphheerraa писал(а):
25.01.2009 16:08
- писать на инглише

...вем людям, от которых я получаю архивы? Оригинально, ничего не скажешь
Ubuntu LL x86 on Acer Extensa 5635G
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5502
ОС: Gentoo

Re: app-arch/unzip и русский в именах файлов

Сообщение /dev/random »

Раньше ни разу не приходилось сталкиваться с этой проблемой, но сейчас проверил - она действительно существует.
Потратил часок, написал патч, исправляющий эту проблему. Кстати, именно так нужно поступать в подобных случаях, а не жаловаться на форуме.


Использование:
Если НЕ объявлена переменная окружения ZIPCHARSET, либо её значение не является корректным именем кодировки, то пропатченная версия ведёт себя аналогично непропатченной.
Если же в этой переменной находится корректное имя кодировки, то она используется в качестве кодировки архива, а системная кодировка определяется из переменной LANG.
(нужно прописать в .bashrc: export ZIPCHARSET=cp866)

Багрепорты приветствуются.


Добавлено: Прикрепляю в виде оверлея:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
proDOOMman
Сообщения: 284

Re: app-arch/unzip и русский в именах файлов

Сообщение proDOOMman »

Спасибо за патч!
Хотя я думал, что существует готовое решение моей проблемы, поэтому и открыл тему.
Ubuntu LL x86 on Acer Extensa 5635G
Спасибо сказали:
Аватара пользователя
izen.fire
Сообщения: 268
ОС: Windows XP

Re: app-arch/unzip и русский в именах файлов

Сообщение izen.fire »

Вот ещё один патч patch-ebcdic.h (из порта FreeBSD ports/russian/unzip):

Код: Выделить всё

--- ebcdic.h.orig    Wed May  4 12:30:10 2005
+++ ebcdic.h    Wed May  4 12:30:18 2005
@@ -237,43 +237,43 @@

 #ifdef IZ_ISO2OEM_ARRAY
 ZCONST uch Far iso2oem[] = {
-    0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE,  /* 80 - 87 */
-    0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F,  /* 88 - 8F */
-    0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D,  /* 90 - 97 */
-    0x7E, 0x54, 0x73, 0x3E, 0x6F, 0x3F, 0x3F, 0x59,  /* 98 - 9F */
-    0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5,  /* A0 - A7 */
-    0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE,  /* A8 - AF */
-    0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA,  /* B0 - B7 */
-    0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8,  /* B8 - BF */
-    0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80,  /* C0 - C7 */
-    0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8,  /* C8 - CF */
-    0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E,  /* D0 - D7 */
-    0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1,  /* D8 - DF */
-    0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87,  /* E0 - E7 */
-    0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B,  /* E8 - EF */
-    0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6,  /* F0 - F7 */
-    0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98   /* F8 - FF */
+   0xC4, 0xB3, 0xDA, 0xBF, 0xC0, 0xD9, 0xC3, 0xB4,  /* 80 - 87 */
+   0xC2, 0xC1, 0xC5, 0xDF, 0xDC, 0xDB, 0xDD, 0xDE,  /* 88 - 8F */
+   0xB0, 0xB1, 0xB2, 0x40, 0xFE, 0xF9, 0xFB, 0x40,  /* 90 - 97 */
+   0x66, 0x02, 0xFF, 0x0D, 0xF8, 0x02, 0xFA, 0x0D,  /* 98 - 9F */
+   0xCD, 0xBA, 0xD5, 0xF1, 0xD6, 0xC9, 0xB8, 0xB7,  /* A0 - A7 */
+   0xBB, 0xD4, 0xD3, 0xC8, 0xBE, 0xBD, 0xBC, 0xC6,  /* A8 - AF */
+   0xC7, 0xCC, 0xB5, 0xF0, 0xB6, 0xB9, 0xD1, 0xD2,  /* B0 - B7 */
+   0xCB, 0xCF, 0xD0, 0xCA, 0xD8, 0xD7, 0xCE, 0xBF,  /* B8 - BF */
+   0xEE, 0xA0, 0xA1, 0xE6, 0xA4, 0xA5, 0xE4, 0xA3,  /* C0 - C7 */
+   0xE5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,  /* C8 - CF */
+   0xAF, 0xEF, 0xE0, 0xE1, 0xE2, 0xE3, 0xA6, 0xA2,  /* D0 - D7 */
+   0xEC, 0xEB, 0xA7, 0xE8, 0xED, 0xE9, 0xE7, 0xEA,  /* D8 - DF */
+   0x9E, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83,  /* E0 - E7 */
+   0x95, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,  /* E8 - EF */
+   0x8F, 0x9F, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,  /* F0 - F7 */
+   0x9C, 0x9B, 0x87, 0x98, 0x9D, 0x99, 0x97, 0x9A,  /* F8 - FF */
 };
 #endif /* IZ_ISO2OEM_ARRAY */

 #ifdef IZ_OEM2ISO_ARRAY
 ZCONST uch Far oem2iso[] = {
-    0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7,  /* 80 - 87 */
-    0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5,  /* 88 - 8F */
-    0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9,  /* 90 - 97 */
-    0xFF, 0xD6, 0xDC, 0xF8, 0xA3, 0xD8, 0xD7, 0x83,  /* 98 - 9F */
-    0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA,  /* A0 - A7 */
-    0xBF, 0xAE, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB,  /* A8 - AF */
-    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xC1, 0xC2, 0xC0,  /* B0 - B7 */
-    0xA9, 0xA6, 0xA6, 0x2B, 0x2B, 0xA2, 0xA5, 0x2B,  /* B8 - BF */
-    0x2B, 0x2D, 0x2D, 0x2B, 0x2D, 0x2B, 0xE3, 0xC3,  /* C0 - C7 */
-    0x2B, 0x2B, 0x2D, 0x2D, 0xA6, 0x2D, 0x2B, 0xA4,  /* C8 - CF */
-    0xF0, 0xD0, 0xCA, 0xCB, 0xC8, 0x69, 0xCD, 0xCE,  /* D0 - D7 */
-    0xCF, 0x2B, 0x2B, 0xA6, 0x5F, 0xA6, 0xCC, 0xAF,  /* D8 - DF */
-    0xD3, 0xDF, 0xD4, 0xD2, 0xF5, 0xD5, 0xB5, 0xFE,  /* E0 - E7 */
-    0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4,  /* E8 - EF */
-    0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8,  /* F0 - F7 */
-    0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0   /* F8 - FF */
+   0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA,  /* 80 - 87 */
+   0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0,  /* 88 - 8F */
+   0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE,  /* 90 - 97 */
+   0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1,  /* 98 - 9F */
+   0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA,  /* A0 - A7 */
+   0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,  /* A8 - AF */
+   0x90, 0x91, 0x92, 0x81, 0x87, 0xB2, 0xB4, 0xA7,  /* B0 - B7 */
+   0xA6, 0xB5, 0xA1, 0xA8, 0xAE, 0xAD, 0xAC, 0x83,  /* B8 - BF */
+   0x84, 0x89, 0x88, 0x86, 0x80, 0x8A, 0xAF, 0xB0,  /* C0 - C7 */
+   0xAB, 0xA5, 0xBB, 0xB8, 0xB1, 0xA0, 0xBE, 0xB9,  /* C8 - CF */
+   0xBA, 0xB6, 0xB7, 0xAA, 0xA9, 0xA2, 0xA4, 0xBD,  /* D0 - D7 */
+   0xBC, 0x85, 0x82, 0x8D, 0x8C, 0x8E, 0x8F, 0x8B,  /* D8 - DF */
+   0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE,  /* E0 - E7 */
+   0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1,  /* E8 - EF */
+   0xB3, 0xA3, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,  /* F0 - F7 */
+   0x9C, 0x95, 0x9E, 0x96, 0x9D, 0x99, 0x94, 0x9A,  /* F8 - FF */
 };
 #endif /* IZ_OEM2ISO_ARRAY */
Ротор поля наподобие дивергенции градуирует себя вдоль спина и там внутре ево неонка.
Спасибо сказали: