Re: [oodisc] Quick hack on unzip 5.51 for cp866 support. Was: О просмотре файлов ОО
Evgeny
eu111 на mail.ru
Чт Июн 3 14:01:35 MSD 2004
Hi!
>> Dmitry Chernyakov wrote:
>>
>>> Кроме этого
>>> окончательно добила проблема невозможности перекодировки русских имён
>>> файлов, созданных winrar/winzip.
>>>
>>>
>>>
>> И всё же это баг unix unzip , так как это он перекодирует cp850 to
>> latin1, а там cp866.
>>
>> Вот такая строка помогает прочитать листинг:
>> unzip -l file.zip | recode l1..IBM850 | recode 866..koi8
>>
> Вот как можно на быструю руку поправить unzip что бы он правильно
> работал с 866 в Unix (koi8-r).
> Как говорится, куда копать понятно, может затем у меня получется
> сделать его универсальным, посмотрим.
Вот ещё немного почистил, в частности на предмет (╓,╕,╖,╝) в OEM to ANSI
(украинской Г' нет). И сделал более гибкую проверку кодировки.
Я думаю, что можно пользоваться!
Собрал rpm для rh9, но есть srpm.
http://eu.zsttk.ru/unzip-5.51-7.cp866tokoi8ub.01.rh9.i386.rpm
http://eu.zsttk.ru/unzip-5.51-7.cp866tokoi8ub.01.rh9.src.rpm
Тот кто хочет собрать сам, вот как я делал сам (после patch):
# ln -s unix/Makefile Makefile
# make linux_noasm LF2="" LOCAL_UNZIP="-DUNIX_KOI8"
Я протестировал на Win2000 with WinRAR and Total Commander,
а так же на каких-то старых архивах.
Буду рад откликам! Особенно интересует WinZIP в разных версиях и языки с
╓,╕,╖,╝.
Bye, Evgeny
----------- следущая часть -----------
This patch for Cyrillic (Russian, Belarusian and Ukrainian) users only.
The following conversion tables translate between IBM PC CP 866
(OEM codepage) and the Cyrillic Unix KOI8-UB (Ansi codepage).
╘ Eugene Byrganov <eu (at) zsttk (dot) ru>, 2004.
Index: unzpriv.h
===================================================================
RCS file: /cvsroot/devel/unzip/unzpriv.h,v
retrieving revision 1.1.1.1
diff -u -4 -r1.1.1.1 unzpriv.h
--- unzpriv.h 2 Jun 2004 11:03:21 -0000 1.1.1.1
+++ unzpriv.h 3 Jun 2004 07:46:22 -0000
@@ -2503,8 +2503,9 @@
* codepage when made on
* -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_)
* -> OS/2 (FS_HPFS_)
* -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0")
+ * -> Win95/WinNT with WinRAR and Total Commander (FS_NTFS_ && hostver == "2.0"); add 'eu'
* EXCEPTIONS:
* PKZIP for Windows 2.5, 2.6, and 4.0 flag their entries as "FS_FAT_", but
* the filename stored in the local header is coded in Windows ANSI (CP 1252
* resp. ISO 8859-1 on US and western Europe locale settings).
@@ -2519,9 +2520,9 @@
if (((hostnum) == FS_FAT_ && \
!(((islochdr) || (isuxatt)) && \
((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
(hostnum) == FS_HPFS_ || \
- ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
+ ((hostnum) == FS_NTFS_ && ((hostver) == 50 || (hostver) == 20 ))) { \
_OEM_INTERN((string)); \
} else { \
_ISO_INTERN((string)); \
}
Index: ebcdic.h
===================================================================
RCS file: /cvsroot/devel/unzip/ebcdic.h,v
retrieving revision 1.1.1.1
diff -u -4 -r1.1.1.1 ebcdic.h
--- ebcdic.h 2 Jun 2004 11:03:21 -0000 1.1.1.1
+++ ebcdic.h 3 Jun 2004 07:46:22 -0000
@@ -219,8 +219,52 @@
#endif /* ?MTS */
#endif /* EBCDIC */
+#ifdef UNIX_KOI8
+/*---------------------------------------------------------------------------
+
+ The following conversion tables translate between IBM PC CP 866
+ (OEM codepage) and the Cyrillic Unix KOI8-UB (Ansi codepage).
+ For Cyrillic (Russian, Belarusian and Ukrainian) users only.
+
+ ---------------------------------------------------------------------------*/
+
+#ifdef IZ_ISO2OEM_ARRAY
+ZCONST uch Far iso2oem[] = {
+ /* From old recode */
+ 244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
+ 184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
+ 200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
+ 216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255,
+ 238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
+ 175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
+ 158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
+ 143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154
+};
+#endif /* IZ_ISO2OEM_ARRAY */
+#ifdef IZ_OEM2ISO_ARRAY
+ZCONST uch Far oem2iso[] = {
+ 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 */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* B0 - B7 */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* B8 - BF */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* C0 - C7 */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* C8 - CF */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* D0 - D7 */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* D8 - DF */
+ 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, /* E0 - E7 */
+ 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1, /* E8 - EF */
+ 0xB3, 0xA3, 0xB4, 0xA4, 0xB7, 0xA7, 0xBE, 0xAE, /* F0 - F7 */
+ 0xB0, 0x95, 0x9E, 0x96, 0xB9, 0x80, 0x2E, 0xA0 /* F8 - FF */
+};
+#endif /* IZ_OEM2ISO_ARRAY */
+#else /* UNIX_KOI8 */
+
/*---------------------------------------------------------------------------
The following conversion tables translate between IBM PC CP 850
(OEM codepage) and the "Western Europe & America" Windows codepage 1252.
@@ -275,8 +319,9 @@
0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */
0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */
};
#endif /* IZ_OEM2ISO_ARRAY */
+#endif /* UNIX_KOI8 */
#if defined(THEOS) || defined(THEOS_SUPPORT)
# include "theos/charconv.h"
#endif
----------- следущая часть -----------
Scanned by evaluation version of Dr.Web antivirus Daemon
http://drweb.ru/unix/
Подробная информация о списке рассылки Oo-discuss