Очень часто, я сталкиваюсь с проблемой перекодировки файлов. К примеру, в субтитрах. Очень часто русские субтитры содержат информацию в кодировке 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
Комментариев нет:
Отправить комментарий