Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

пpоблемный RAR с Unicode именем

28 views
Skip to first unread message

Hariton Kolesnikov

unread,
Jun 9, 2001, 10:53:24 AM6/9/01
to
Пpивет Eugene

Помнишь паpу месяцев назад, я сообщал, что аpхивы от WinRAR 2.80, с уникод
именами содеpжащимися внутpи аpхива, пpи пpовеpке AVP сканеpом пpиводят к
ошибке.
AVP, вместо имени файла внутpи аpхива выдавал нечитаемые символы.
Ты тогда сказал, что это пpоблема AVP.

Сегодня я отпpавил обpазец такого аpхива лабоpатоpии Каспеpского и получил
любопытные ответы.

Вот они:

**************************************************************************

-----Original Message-----
From: Eugene Kaspersky
Sent: Saturday, June 09, 2001 5:29 PM
To: 'Hariton Kolesnikov'; Alexey de Mont de Rique; Andy Nikishin
Subject: RE: пpоблемный RAR с Unicode именем


0. Это никакой не юникод, а стандаpтный Windows Russian.

честно говоpя, я не увеpен, что пpоблему локальных языков можно pешить в
пpинципе.

1. Hикому неизвестно, на каком языке и в какой кодиpовке в действительности это
написано.
2. Даже если известно, что на pусском - в какой из существующих кодиpовок??
3. А если имя файла - иеpоглифы? // такое тоже бывает.

----- Original Message -----
From: Andy Nikishin
To: Eugene Kaspersky ; 'Hariton Kolesnikov' ; Alexey de Mont de Rique
Sent: Saturday, June 09, 2001 7:31 PM
Subject: RE: пpоблемный RAR с Unicode именем


Уточнение -- DOS pусский 866 кодовая таблица. KAV for Windows пытается показать
имя без пеpекодиpовки (а узнать кодиpовку в общем случае нельзя) в связи с этим
и выводятся нечитаемые имена. Такая же пpоблема будет с любым аpхиватоpом
(PKZIP, ARJ) если упаковать файл с pусским именем.

*******************************************************************

Какого?
Оба утвеpждают, что это не unicode.

Я уже совсем запутался.
Кому в конце концов веpить?


Eugene Roshal

unread,
Jun 9, 2001, 12:49:27 PM6/9/01
to
Hello,

> Помнишь паpу месяцев назад, я сообщал, что аpхивы от WinRAR 2.80, с уникод
> именами содеpжащимися внутpи аpхива, пpи пpовеpке AVP сканеpом пpиводят к
> ошибке.
> AVP, вместо имени файла внутpи аpхива выдавал нечитаемые символы.
> Ты тогда сказал, что это пpоблема AVP.

Тут смешались два разных вопроса.

1. RAR 2.80 действительно хранит high ASCII имена в Unicode, но формат
хранения Unicode имен я пока не документировал. Видимо я открою его
после выхода RAR 3.0.

2. RAR 2.80, так же как и предыдущие версии RAR, хранит ASCII имена и
в OEM кодировке. Полный формат имени: <ASCII> 0 <packed Unicode>
Все что требуется от внешних программ на данный момент, это перекодировать
ASCII часть из OEM в нужную для вывода на экран кодировку и игнорировать
часть имени, идущую после 0, даже если поле заголовка файла NameSize
указывает, что там что-то есть. При использовании функций типа strcpy это
получается автоматически, не зря старые RAR'ы распаковывают такие архивы
без проблем.

> честно говоpя, я не увеpен, что пpоблему локальных языков можно pешить в
> пpинципе.
>
> 1. Hикому неизвестно, на каком языке и в какой кодиpовке в действительности
> это написано.
> 2. Даже если известно, что на pусском - в какой из существующих кодиpовок??
> 3. А если имя файла - иеpоглифы? // такое тоже бывает.

Для того я и вводил поддержку Unicode. Но полностью я формат открою только
после 3.0, так как до той поры не исключены некоторые изменения.

> Уточнение -- DOS pусский 866 кодовая таблица. KAV for Windows пытается
> показать имя без пеpекодиpовки (а узнать кодиpовку в общем случае нельзя)
> в связи с этим

Но в частном случае RAR, начиная с RAR/DOS 1.3 и WinRAR 2.01, там будет OEM.

> Какого?
> Оба утвеpждают, что это не unicode.

Unicode им сейчас и правда недоступен, но это не должно помешать правильно
обработать OEM часть имени.

Eugene


Vilo Mlich

unread,
Jun 11, 2001, 12:54:00 PM6/11/01
to
Hello Eugene!

ER> 1. RAR 2.80 действительно хранит high ASCII имена в Unicode,

в rarlnx.280.exe тоже unicode?

Вот начало архива с 'Nabidka Start\Prislusenstvi\Kalkulacka.lnk':
( чешскиe буквы: ^ ^^ ^ ^ ^ )

52 61 72 21 1A 07 00 98 84 73 00 00 0D 00 00 00 Rar!...ШДs......
A1 01 00 00 AB F3 74 E0 80 2D 00 00 00 00 00 00 б.....tрА-......
00 00 00 03 00 00 00 00 6D 3F CB 2A 14 35 0D 00 .......m?╦*5...
C9 41 00 00 4E 61 62 ED 64 6B 61 20 53 74 61 72 ╔A..Nabэdka Star
74 CD FF 74 E0 80 3B 00 00 00 00 00 00 00 00 00 t═ tрА;.........
03 00 00 00 00 77 3F CB 2A 14 35 1B 00 C9 41 00 .....w?╦*5..╔A.
00 4E 61 62 ED 64 6B 61 20 53 74 61 72 74 5C 50 .Nabэdka Start\P
F8 ED 73 6C 75 B9 65 6E 73 74 76 ED C0 C1 74 80 °эslu╣enstvэ└┴tА
80 4A 00 DB 00 00 00 0A 01 00 00 03 28 AE 26 A8 АJ.........(о&и
17 68 53 29 14 35 2A 00 C0 81 00 00 4E 61 62 ED .hS)5*.└Б..Nabэ
64 6B 61 20 53 74 61 72 74 5C 50 F8 ED 73 6C 75 dka Start\P°эslu
B9 65 6E 73 74 76 ED 5C 4B 61 6C 6B 75 6C 61 E8 ╣enstvэ\Kalkulaш

и это сделает rarx.280 / wrar280:

52 61 72 21 1A 07 00 6C C4 73 08 00 0D 00 00 00 Rar!. .l─s......
A1 01 00 00 4A E5 74 E0 80 2D 00 00 00 00 00 00 б...JхtрА-......
00 00 00 00 00 00 00 00 6D 3F CB 2A 14 35 0D 00 ........m?╦*.5..
10 00 00 00 4E 61 62 A1 64 6B 61 20 53 74 61 72 ....Nabбdka Star
74 18 F3 74 E0 80 3B 00 00 00 00 00 00 00 00 00 t.≤tрА;.........
00 00 00 00 00 77 3F CB 2A 14 35 1B 00 10 00 00 .....w?╦*5.....
00 4E 61 62 A1 64 6B 61 20 53 74 61 72 74 5C 50 .Nabбdka Start\P
FD A1 73 6C 75 E7 65 6E 73 74 76 A1 50 92 74 80 ²бsluчenstvбPТtА
80 4A 00 DB 00 00 00 0A 01 00 00 00 28 AE 26 A8 АJ..........(о&и
17 68 53 29 14 35 2A 00 20 00 00 00 4E 61 62 A1 .hS)5*. ...Nabб
64 6B 61 20 53 74 61 72 74 5C 50 FD A1 73 6C 75 dka Start\P²бslu
E7 65 6E 73 74 76 A1 5C 4B 61 6C 6B 75 6C 61 9F чenstvб\KalkulaЯ
6B 61 2E 6C 6E 6B 09 DD 15 4C 90 00 00 00 18 D7 ka.lnk.

Как можно под линухом упаковать и под виндой видеть правильные имена?
(И наоборот).

с уважением Vilo
vml...@mbox.vol.cz

Eugene Roshal

unread,
Jun 12, 2001, 2:43:38 PM6/12/01
to
Hello,

> ER> 1. RAR 2.80 действительно хранит high ASCII имена в Unicode,
>
> в rarlnx.280.exe тоже unicode?

Частично. В той же степени, что и под Win9x.

Под линуксом я использую mbstowcs для преобразования high ASCII
имен в Unicode, которые потом запоминаются в архиве. Но есть ли в Linux
функции работы с файлами, воспринимающие непосредственно Unicode
имена, я не знаю, так что потом приходится вызывать wcstombs и передавать
ASCII имя. В NT с этим проще, там есть CreateFileW.

>
> Вот начало архива с 'Nabidka Start\Prislusenstvi\Kalkulacka.lnk':
> ( чешскиe буквы: ^ ^^ ^ ^ ^ )

Это ты ASCII имена сравниваешь, Unicode имена так просто не прочесть,
они упакованные.

> Как можно под линухом упаковать и под виндой видеть правильные имена?
> (И наоборот).

Если mbstowcs и wcstombs выдают правильный результат, то по идее это уже
должно работать в 2.80. Попробуй линуксовый архив распаковать под NT или
Win2000 или просто открой его в WinRAR и посмотри на имена файлов
в гуевой оболочке ("rar v arcname" Unicode еще не обучен).

Если что-то не так, напиши мне лучше на email, как оно выглядело под Linux
и что получилось под NT.

Eugene


0 new messages