LINUX.ORG.RU
ФорумAdmin

Проблема кодировки: FTP + UTF8 + Win Upload


0

0

На моей машинке крутится vsftpd, локаль стоит в UTF8. Проблема возникает, когда с Win-машинок заливают файлы с русскими именами. Отображаются одни вопросы. Как-то это можно побороть? Подскажите, пожалуйста...


1) Заставить клиентов заливать с помощью файл-менеджера, который поддерживает кодировку на ftp.

2) поставить proftpd с перекодировкой.

Deleted
()
Ответ на: комментарий от Deleted

Решил проблему.

Поставил translit-1.03-4.i386.rpm
Сначала перевожу кодировку имен файлов из CP1251 в UTF8
/usr/bin/convmv -f cp1251 -t UTF8 --notest -r /var/ftp/upload/
Затем рекурсивно прохожу по всем каталогам при помощи вот такого скриптика и перевожу названиня файлов из русских UTF8 в 
транслит UTF8 (переделал найденный по ссылке в LOR-FAQ
mp3-converter.pl):

#!/usr/bin/perl -w
use strict;
use File::Copy;

my $cnt=0; my $count=0;

process_dir($ARGV[0]);

sub process_dir {
    my $dirName=$_[0];
    $dirName ||='.';
    my $file='';

    $dirName =~ s/\/\//\//g;
    opendir(DIR, "$dirName");# or return;  ## !! =)
    my @files = grep (!/^\.\.?$/, readdir(DIR));
    closedir(DIR);
    print "[LEVEL $cnt] DIR: $dirName\n";
    foreach $file (@files){
        my $trFile=getTRname($file);
        $count++;
        print "  ($cnt):  $dirName/$file\n";
        print "    #$count\t\t$trFile\n";
        move("$dirName/$file","$dirName/$trFile");
        $cnt++;
        process_dir("$dirName/$trFile");
        $cnt--;
    }
}

sub getTRname {
    my $input=$_[0];
    my $trFile=`echo "$input" | iconv -f UTF-8 -t KOI8-R  | translit koi8-phg.rus`;
    $input =~ s/ /_/g;
    $trFile=~s/[^a-zA-Z0-9\_\-\.\ ]//gs;
    $trFile=~s/\.+/\./g;
    $trFile=~s/\ /_/g;
    $trFile=~s/\_+/\_/g;
    $trFile=~s/\-+/\-/g;
    if(!$trFile) { return $input; };
    return $trFile;
}

Немного кривовато, но работает на ура.

boatman
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.