Как стать автором
Поиск
Написать публикацию
Обновить

TorrentFlux+cyrillic encoding – выходим из положения

Пользователям TorrentFlux (http://www.torrentflux.com/) приходилось сталкиватся с тем, что при скачивании .torrent-файлов, которые содержали в себе названия файлов и папок кириллицей, с неправильным отображением кодировки при старте загрузки, а также при создании 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
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.