= Сообщение: 2410 из 10763 ===================================== RU.UNIX.BSD = От : Eugene Grosbein 2:5006/1 15 Jan 15 17:23:18 Кому : Vassily Kiryanov 15 Jan 15 17:23:18 Тема : Re: файлы с русскими именами FGHI : area://RU.UNIX.BSD?msgid=grosbein.net+96e8b604 На : area://RU.UNIX.BSD?msgid=2:5054/36+54b7c265 = Кодировка сообщения определена как: CP866 ================================== ============================================================================== 15 янв 2015, четверг, в 14:34 NOVT, Vassily Kiryanov написал(а):
EG>> Сомневаюсь насчёт "побились". Скорее всего, у тебя на 8.2 имена были EG>> в кодировке KOI8-R, так и развернулись из архива, а на десятке локаль EG>> поди у тебя UTF-8. А перекодирования в tar никакого нет.
VK> Создал из папки с русскими именами пять tar-архивов, в четырёх случаях перед VK> вызовом "tar -c" присутствовала одна из строчек VK> #export LC_ALL=ru_RU.UTF-8 VK> #export LC_ALL=C VK> #export LC_ALL=ru_RU.KOI8-R VK> #export LC_ALL=ru_RU.CP1251 VK> а в пятом случае ни одной переменной "LC_*" не было. VK> Из всех пяти архивов у четырёх, которые не UTF-8, совпали md5-суммы. Т.е. для VK> tar указание любой восьмибитной кодировки имён файлов равносильно её неуказанию, VK> влияние оказывает только указание многобайтной кодировки, хотя из них я и VK> проверил только лишь UTF-8.
Так и должно быть. Как я уже говорил, в tar нет перекодировки и на локаль ему плевать, он сохраняет имена так, как они лежат на файловой системе.
В отличие от NTFS и прочих, которые сохраняют имена в определенной кодировке, в UFS на фре нет понятия кодировки - в именах файлов допустимы любые байты, кроме зарезервированных / (разделитель каталогов) и нулевого байта (терминатор строк). Интерпретация имён оставлена приложениям - хотят, интерпретируют в KOI8-R, хотят - в CP1251, хотят - в UTF-8 или других.
VK> Потом я оба [отличающихся] tar-файла проверял уже на распаковку (tar-ом) под VK> 10.1 и смотрел, что будет с именами, тоже пытаясь задавать разные LC_ALL. Как и VK> следовало ожидать, имена файлов не искорёжились только если и при упаковке и при VK> распаковке перед вызовом tar стояла строка "export LC_ALL=ru_RU.UTF-8". Hо это VK> ладно, это неудивительно. Странно другое, мне удалось распаковать test.tar с VK> 8-ми битной кодировкой имён, сохранив имена в порядке, если я распаковывал их не VK> tar-ом, а копированием из-под MidnightCommander.
А у mc своя реализация tarfs, он системный bsdtar не использует.
VK> Вот это уже меня удивило не на VK> шутку. Значит информация о русских именах в каком-то более-менее пристойном виде VK> сохраняется и в однобайтной (непонятно какой) кодировке, просто tar её извлечь VK> не может.
Существуют разные форматы tar-архивов. В формате gnutar не сохраняется информация о кодировке имён файлов, имена сохраняются как последовательности "сырых байтов" - как сохранили, так и развернули и пофиг на локали. Этот формат можно указать при создании архива через tar --format=gnutar, но это не дефолт. По дефолту при локали UTF-8 tar сохраняет информацию об этой локали в именах файлов, которые являются корретными строчками в кодировке UTF-8 (ASCII - подмножество UTF-8).