Очень часто, я сталкиваюсь с проблемой перекодировки файлов. К примеру, в субтитрах. Очень часто русские субтитры содержат информацию в кодировке windows-1251, а мой любимый VLC player просто отказывается выводить их нормально. Раньше проблему я решал через gedit, потом начал пользоваться консольной iconv, конечно, наверняка, существует ещё много решений, но я решил написать небольшой wrapper к iconv, чтобы облегчить себе жизнь окончательно.
Начну с того, что есть замечательная папка в Gnome - ~/.gnome2/nautilus-scripts, и какой бы скрипт вы туда не положили, он тут же будет отображаться в меню File->Scripts или по нажатию правой клавиши мышки. Скрипт нужно класть именно туда.
Сама задача, которую я поставил - это сделать так, чтобы выделив нужные мне файлы в nautilus, я бы быстро смог поменять кодировку всем
выбранным файлам.
Код с описание дальше.
Итак сам код:
#!/bin/bash
#
# ICONV wrapper
#
# AUTHOR: nol1ght (nol1ght.mail@gmail.com)
# VERSION: 1.0
# LICENSE: public
#
#Создаём массив с кодировками, все поддерживаемые кодировки iconv'ом можно посмотреть набрав iconv -l в консоли.
encodings=( "WINDOWS-1251" "KOI8-RU" "ISO-8859-5" "UTF-8" )
#Высчитываем последний элемент
max_index=$((${#encodings[@]} - 1))
#подготавливаем текст для меню, из которого будет выбираться кодировка
for ((i = 0; i <= max_index; i++)); do gdialog_array="$gdialog_array $i ${encodings[i]} " done
#Запрашиваем у пользователя текущую кодировку файлов
FROM=$(gdialog --title "Select encoding of original text" --menu "Encoding FROM" 20 51 4 $gdialog_array 2>&1)
#Если приходит пустое значение, значит пользователь ничего не выбрал или закрыл диалог -> завершаем скрипт
if [ -z $FROM ]
then
exit
fi
#Запрашиваем у пользователя нужную кодировку файлов
TO=$(gdialog --title "Select encoding for output" --menu "Encoding TO" 20 51 4 $gdialog_array 2>&1)
#Если приходит пустое значение, значит пользователь ничего не выбрал или закрыл диалог -> завершаем скрипт
if [ -z $TO]
then
exit
fi
#создаём временный файл.
TMP_FILE=`tempfile 2> /dev/null`
#перебираем все выделенные файлы в nautilus
while [ $# -gt 0 ]
do
#Обрабатываем пробелы в имени файла.
file=`echo "$1" | sed 's/ /\?/g'`
#Перекодируем во временный файл
iconv -f ${encodings[$FROM]} -t ${encodings[$TO]} $file -o $TMP_FILE
#Заменяем текущий файл временным.
cp $TMP_FILE $file
shift
done
Как она работает можно увидеть на скриншотах:
1. У нас есть файл в неправильной кодировке(это видно в preview):
3. Выбираем из какой в какую кодировку нам нужно перекодировать:
4. Результат можно увидеть сразу же в preview.
Надеюсь данный скрипт будет кому-то полезен, если заинтересовались, как ещё можно увеличить функциональность вашего nautilus скриптами, тогда обратите внимание на http://g-scripts.sourceforge.net/ - тут множество различных скриптов на все случаи жизни )
source:
iconv





Комментариев нет:
Отправить комментарий