﻿Q: Директория RAR-архива, созданного в xNix (HOST_OS = 3) не читаема.

Дампа подобного архива:

000000: 52 61 72 21 1A 07 00
                             CF  90                         HEAD_CRC
                                    73                      HEAD_TYPE
                                       00 00                HEAD_FLAGS
                                             0D 00          HEAD_SIZE
                                                   00 00    RESERVED1
000010: 00 00 00 00                                         RESERVED2



                    5D 83                                   HEAD_CRC
                          74                                HEAD_TYPE
                             C0  80                         HEAD_FLAGS = 0x80C0
                                    47 00                   HEAD_SIZE
                                          43 62 40 00       PACK_SIZE
                                                      8A    UNP_SIZE
000020: EA 40 00
                 03                                         HOST_OS = 3 - Unix
                    CC F4 9C 0D                             FILE_CRC
                                 04 4D 45 3B                FTIME
                                             1D             UNP_VER
                                                33          METHOD
                                                   27 00    NAME_SIZE
000030: FF 81 00 00                                         ATTR
                    4B 61 73 63                             HIGH_PACK_SIZE
                                 68 65 79 5C                HIGH_UNP_SIZE
                                             30 31 20 2D    FILE_NAME  =  Kaschey\01 - Р_Р_С'С_Р_Р_С_РєС+РёС_.mp3
000040: 20 D0 98 D0 BD D1 82 D1  80 D0 BE D0 B4 D1 83 D0
000050: BA D1 86 D0 B8 D1 8F 2E  6D 70 33 11 D9 50 CD 4C
000060: D1 9D 59 59 15 B3 94 D5  87 6B D9 95 6C 1B 56 0D
000070: AF 7B 56 6D AB 00 D2 6A  C0 35 62 DA B0 8D 58 06
000080: BD DB 8A A7 5D EB 7B D7  6E A9 D7 FF 35 BE 4F 3E
.
.
.
Здесь поле HEAD_FLAGS (для типа 0x74) не содержит значение 0x200, но в тоже время поле FILE_NAME содержит имя файла в UTF-8 (визуально :-).





A: Если в HEAD_FLAGS 0x200 нет, значит RAR не смог корректно преобразовать имя из native кодировки в Unicode, то есть функция mbstowcs вернула ошибку или пустую строку. С чем это связано непонятно, но под юниксами такое бывает.

В этом случае RAR сохраняет только имя в родной однобайтовой кодировке. Оно корректно распакуется в тех же условиях, в которых был создан архив, но при переносе на другую платформу с другой кодировкой получится галиматья.

В данном случае (см. пример дамна) в качестве родной кодировки Unix использовал UTF-8, но RAR об этом не знает, и каких-то признаков определить, что данный архив использует именно UTF-8, нет.
