Пользователям TorrentFlux (http://www.torrentflux.com/) приходилось сталкиватся с тем, что при скачивании .torrent-файлов, которые содержали в себе названия файлов и папок кириллицей, с неправильным отображением кодировки при старте загрузки, а также при создании torrentflux этих папок и файлов на разделе жесткого диска. Но ситуацию возможно исправить, внеся несколько изменений в исходный код.
Для начала, займемся фронт-эндом (собственно torrentflux), для приемлемого отображения кириллицы.
Для корректного отображения достаточно строки:
Для начала, займемся фронт-эндом (собственно torrentflux), для приемлемого отображения кириллицы.
Для корректного отображения достаточно строки:
define("_CHARSET","windows-1251");
в файле /language/lang-russian.php и нескольких правок в файле metaInfo.php, а именно:
заменим
$this->name на iconv(«UTF-8»,«WINDOWS-1251»,$this->name)
в строке
echo(«d.add(».$this->num.",".$parent.",\"".$this->name."\",".$this->prio.",0);\n")
и
$v->name
на
iconv("UTF-8","WINDOWS-1251",$v->name)
в строке
echo("d.add(".$v->num.",".$this->num.",\"".$v->name."\",".$v->prio.",".$v->size.");\n");
После чего в строке
echo htmlentities($btmeta['info']['name'].$torrent_size." (".formatBytesToKBMGGB($torrent_size).")", ENT_QUOTES);
заменяем
htmlentities($btmeta['info']['name'].$torrent_size
на
htmlspecialchars(iconv("UTF-8","WINDOWS-1251",$btmeta['info']['name']).$torrent_size <br/>
И, наконец, в строке
echo "<tr><td>Directory Name:</td><td>".htmlentities($btmeta['info']['name'], ENT_QUOTES)."</td></tr>"; <br/>
заменяем
htmlentities($btmeta['info']['name'] <br/>
на
htmlspecialchars(iconv("UTF-8","WINDOWS-1251",$btmeta['info']['name']) <br/>
Так, как bittornado создает названия файлов и каталогов в кодировке utf-8, внесем несколько изменений в исходный код для создания файловой структуры в нужной нам кодировке.
Проверяем наличие нужной локали:
#locale –a | grep koi8-r
Для того, чтобы сгенерировать файлы локали, нужно добавить строку:
ru_RU KOI8-R
в файл /etc/locale.gen (в качестве дистрибутива используется Gentoo Linux) и выполнить команду:
#locale-gen
Текущую локаль можно не изменять, достаточно того, чтобы были сгенерированы файлы нужной локали.
Открываем файл TF_BitTornado/BitTornado/download_bt1.py, добавляем в конце строки:
f = path.split(f)[ 0] <br/>
строку
decode('utf-8').encode('koi8-r') <br/>
В результате чего получим строку:
f = path.split(f)[ 0].decode('utf-8').encode('koi8-r') <br/>
Затем, перед строкой:
if f != '' and not path.exists(f): <br/>
вставляем строку:
if forcedir: f = f.decode('utf-8').encode('koi8-r') <br/>
Открываем файл TF_BitTornado/BitTornado/BT1/Storage.py, ищем строку:
file, length = files[i] <br/>
и заменяем ее на строки:
utf_file, length = files[i]<br/>file = utf_file.decode('utf-8').encode('koi8-r') <br/>
После этого Torrentflux будет нормально работать с кириллическими кодировками.
Видоизмененные файлы находятся тут: http://dl.dropbox.com/u/3248658/tf_modified.tar.gz