Преобразование кодировок.

Установка, настройка, эксплуатация.

Модератор: ROOT

Преобразование кодировок.

Сообщение ROOT » 18 июл 2017, 13:19

Оглавление


Темы
 Перекодировка текстовых файлов 
 Перекодировка имён файлов 
 Преобразование тегов в аудиофайлах 
 Преобразование форматов графики 
 Преобразовать HEX в текст 
 Преобразовать Base64 в текст 


 Перекодировка текстовых файлов 
В Windows по умолчанию используется кодировка символов CP1251, чем иногда доставляет проблем пользователям других, нормальных ОС, которые давно перешли на юникод и забыли о проблемах с кодировками как страшный сон. Но пользователи Windows как американцы, не знают, что существуют другие страны ОС и сохраняют субтитры в CP1251 что делает их нечитабельными для других.

Для решения этой проблемы есть iconv который как раз и служит для перекодировки текстовых файлов из одной кодировки в другую. Во всех почти дистрибутивах данный пакет устанавливается по умолчанию, но если его вдруг не оказалось - установите его с помощью вашего пакетного
менеджера.

Для перекодировки достаточно ввести всего одну команду в терминале, а именно:
Код: выделить все
iconv -f cp1251 -t utf8 /Video/somefile.srt -o /Video/subtitles.srt

Поясню: ключ "f" задает исходную кодировку в которой файл находится сейчас, ключ "t" указывает целевую кодировку, ключ "o" задает путь для сохранения перекодированного файла.

Вот, все очень просто. Так же вы можете таким образом кодировать любые текстовые файлы. Часто и тексты песен попадаются с такой неприятной особенностью.

Недавно узнал более простой и понятный способ перекодировки текстовых файлов - с помощью enconv.
Не буду приводить полного синтаксиса и описания всех ключей. Для перекодировки достаточно одного, например:
Код: выделить все
enconv -x UTF-8 somefile.txt

С помощью данной команды мы перегнали текст в UTF-8. Да, именно, просто перегнали без необходимости указания исходной кодировки. Все просто, указываем лишь ту которую хотим получить. Желательно сделать резервную копию файла, так как насколько я понял enconv'у нельзя задать выходной файл и изменяться кодировка будет прямо в исходном файле.
вывод файла с другой кодировкой
Код: выделить все
cat iptables_1251 | iconv -f cp1251

 Перекодировка имён файлов  
dnf install convmv
рекурсивная перекодировка имён файлов из cp1251 в utf8 на Linux-системах (если имя файла вопросиками)
а) проверка
Код: выделить все
convmv -f CP1251 -t UTF-8 * -r

б) запуск
Код: выделить все
convmv -f CP1251 -t UTF-8 * -r --notest

Транслитерация имён файлов в текущем каталоге и его подкаталогах
Код: выделить все
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов в транслит.

shopt -s nullglob
IFS=$'\n'
for NAME in `find . -type f` ; do
  BNAME=`basename "$NAME"`
  BFOLDER=${NAME%/*}
  TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
  TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
  TRS=${TRS//ч/ch};
  TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
  TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
  TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
  TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
  TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
  TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
  TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
  TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
  TRS=${TRS//ъ/} TRS=${TRS//ь/};
  TRS=${TRS//Ь/}
 if [[ "$TRS" != "$BNAME" ]]; then
  NEWTRS=`echo "$BFOLDER"/"$TRS"`
#  echo "moving $NAME to $NEWTRS"
    mv -v "$NAME" "$NEWTRS"
fi
done

Транслитерация имён каталогов в текущем каталоге и его подкаталогах
Код: выделить все
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# каталогов в транслит.

shopt -s nullglob
IFS=$'\n'
while true; do
    COUNT=0
    for NAME in `find . -type d` ; do
        BNAME=`basename "$NAME"`
        BFOLDER=${NAME%/*}
        TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
        TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
        TRS=${TRS//ч/ch};
        TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
        TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
        TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
        TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
        TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
        TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
        TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
        TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
        TRS=${TRS//ъ/} TRS=${TRS//ь/};
        TRS=${TRS//Ь/}
        if [[ "$TRS" != "$BNAME" ]]; then
            NEWTRS=`echo "$BFOLDER"/"$TRS"`
#            echo "moving $NAME to $NEWTRS"
            COUNT=`expr $COUNT + 1`
            mv -v "$NAME" "$NEWTRS"
            break
        fi
    done
    if [ $COUNT -eq 0 ]; then
        echo "Everything seems to be done"
        exit
    fi
done



 Преобразование тегов в аудиофайлах 
Для преобразования тегов в аудиофайлах требуется пакет python-mutagen.
Код: выделить все
dnf install python-mutagen
cd /MUSIC/
mid3iconv -p -d -e WINDOWS-1251 file.mp3

  • -p не изменять теги в файле, для теста
  • -d отображать теги после изменения кодировки
  • -e Конвертировать из указанной кодировки. По умолчанию используется кодировка по умолчанию для вашей локали.


 Преобразование форматов графики 
конвертировать все файлы .png в текущей папке в формат jpg
Код: выделить все
magick mogrify -format jpg *.png

Вы можете изменить размер всех ваших изображений JPEG в папке до размера 256x256 с помощью этой команды:
Код: выделить все
magick mogrify -resize 256x256 *.jpg

давайте уменьшим размер нашей розы в 2 раза:
Код: выделить все
magick mogrify -resize 50% rose.jpg



 Преобразовать HEX в текст 
Код: выделить все
echo 4e657442794e657431375f3135 | xxd -r -p
NetByNet17_15

Текст в HEX
Код: выделить все
echo -n NetByNet17_15 | xxd -p
4e657442794e657431375f3135



 Преобразовать Base64 в текст 
Base64 в текст
Код: выделить все
$ echo Rk9PCg== | base64 -d
FOO

Текста в Base64
Код: выделить все
$ echo FOO | base64
Rk9PCg==
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 145
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron