DimmY

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Dimitr1s Вот комментарии автора на ваши вопросы (в дальнейшем он предлагает вам писать ему напрямую на email, без моего участия). > Как я понял речь о преобразовании дополнительной информации в теле архива в > Unicode (UTF-16LE) , для Win-версии (то есть многобайтовую строку, в строку > из двухбайтовых символов, так что ли?). Все версии RAR, кроме RAR/DOS, где с Unicode совсем плохо, хранят не английские имена файлов в формате Unicode (UTF-16LE), сжатом несложным алгоритмом. В принципе, RAR умеет хранить имена и в UTF-8, но формат хранения роли не играет, так как проблем с преобразованием к этому формату и из него в RAR нет. Проблемы возникают с получением имен файлов от операционной системы. > Потому что имена файлов всё равно в > Linux - UTF-8, в Windows - ASCII. Формально в Linux нет гарантии, что текущий locale - UTF-8, и что поддержка UTF-8 вообще присутствует в системе. Более того, когда писалась эта часть RAR, не только формально, но и реально UTF-8 далеко не всегда являлся default locale. Как с этим обстоят дела в современных дистрибутивах Linux, я не смотрел. Но отказаться от получения Unicode имени с помощью mbstowcs и перейти к получению такого имени с помощью преобразования UTF-8 к UTF-16 можно в случае, если в документации Linux официально заявлено, что default locale это всегда UTF-8. Пока я такого не видел. Можно, конечно, написать свою mbstowcs_fixed, которая будет определять current locale, для UTF-8 сама преобразовывать его к UTF-16, для остальных locale вызывать mbstowcs. Возможный вариант на будущее, если с проблемой с mbstowcs не удастся разобраться. > И опять же, ладно в Linux, положим, неправильно отрабатывает mbstowcs, а в > Windows преобразование только в ASCII (ни в Unicode, ни в UTF-8 имена > файлов посмотреть нельзя), WinRAR работает с Unicode именами и хранит имена в Unicode, но в сжатом виде. Но, повторюсь, дело не в формате хранения. Хранил бы RAR имена в UTF-8, все равно у нас нет гарантии, что readdir в Linux отдаст имена только в UTF-8. А mbstowcs формально гарантирует преобразование из current locale в Unicode. |