Форум русскоязычного сообщества Ubuntu


Автор Тема: Как пакетно поменять кадировку у файлов  (Прочитано 1753 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Как пакетно поменять кадировку у файлов
« Ответ #15 : 18 Июля 2016, 00:14:49 »
megallodon,
Странно, файлов недоступных для записи нет. Вот новый "debug" код для перекодирования из CP1251 в UTF-8.
(просто все копируеш и вставляеш в терминал):
Err_e() { echo -e "\033[22;31m$*\033[0m \"$F\""; continue; }; \
IFS=$'\n'; for F in $(find -type f \( -iname "*.php" -o -iname "*.txt" -o -iname "*.html" \)); \
do if [[ "$(file -bi "$F")" != *charset=utf-8 ]]; then \
: > ".tmp_file"; iconv -f CP1251 "$F" -o ".tmp_file" 2>/dev/null || Err_e "Не удалось конвертировать файл: "; \
if [[ "$(file -bi ".tmp_file")" = *charset=utf-8 ]]; then \
rm "$F" || Err_e "Ошибка при удалении файла: "; cat .tmp_file | tr -d '\r' > "$F"; \
echo "Успешно перекодирован файл: \"$F\""; \
else Err_e "Ошибка после проверки кодировки временного файла для файла: "; fi; \
else Err_e "Файл уже имеет кодировку UTF-8: "; fi; done | nl

Только при успешном перекодировании файла будут выведено соответствующее сообщение,
и файл уже будет точно в utf-8, в остальных же случаях будет выведено красным сообщение
о причине ошибки при обработке файла. + весь вывод нумеруется.

Ошибки: "Не удалось конвертировать файл" или "Ошибка после проверки кодировки временного файла для файла" означают что кодировка исходных файлов не соответствует указаной (CP1251).


Пользователь добавил сообщение 18 Июля 2016, 06:58:35:
Посмотреть сколько файлов с каждой кодировкой:
find -type f \( -iname "*.php" -o -iname "*.txt" -o -iname "*.html" \) -exec file -bi "{}" \; | grep -o 'charset=.*' | sort | uniq -c
« Последнее редактирование: 18 Июля 2016, 06:58:35 от renzrv »

Оффлайн jimfuny

  • Автор темы
  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: Как пакетно поменять кадировку у файлов
« Ответ #16 : 18 Июля 2016, 11:25:56 »
вот что получилось
Код: (html5) [Выделить]
     1 Файл уже имеет кодировку UTF-8:  "./engine/ajax/newsletter.php"
     2 Файл уже имеет кодировку UTF-8:  "./engine/classes/min/lib/Minify/ClosureCompiler.php"
     3 Файл уже имеет кодировку UTF-8:  "./engine/classes/min/lib/Minify/Cache/XCache.php"
     4 Файл уже имеет кодировку UTF-8:  "./engine/classes/mobiledetect.class.php"
     5 Файл уже имеет кодировку UTF-8:  "./engine/modules/antibot/antibot.php"
     6 Файл уже имеет кодировку UTF-8:  "./engine/modules/main.php"
     7 Файл уже имеет кодировку UTF-8:  "./engine/modules/comments.php"
     8 Файл уже имеет кодировку UTF-8:  "./engine/api/api.class.php"
     9 Файл уже имеет кодировку UTF-8:  "./engine/inc/dumper.php"
    10 Файл уже имеет кодировку UTF-8:  "./engine/editor/jscripts/tiny_mce/plugins/emoticons/emotions.php"
    11 Файл уже имеет кодировку UTF-8:  "./install.php"
    12 Файл уже имеет кодировку UTF-8:  "./cron.php"

думаю что дело не в комбинациях команд, возможно сам движок с косяками потому и не работает
любопытно что именно папку templates не хочет видеть

наверно придется под Windows найти программу
вам лично огромное спасибо
« Последнее редактирование: 18 Июля 2016, 12:43:07 от Azure »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Как пакетно поменять кадировку у файлов
« Ответ #17 : 18 Июля 2016, 16:19:50 »
Что не работает? какие еще движки/косяки? Ты же уже какой раз перекодиш,
поэтому и написано что файлы давно уже в utf-8, если перекодировались неправильно/с ошибками,
это значит только одно - указана неправильная исходная кодировка.
Стандарт для файлов с кодировкой CP1251 (WINDOWS-1251) определяется file'ом как ISO-8859*.
Есть коды и для определения правильных кодировок файла.

Цитировать
любопытно что именно папку templates не хочет видеть
Кто невидит? bash/find/ls/iconv ?
Содержимое папки ~/Templates контроллируется и используется файл-менеджером
для определения шаблонов при создании файлов, поэтому могут возникать проблемы, и ее не нужно никогда использовать.

Цитировать
наверно придется под Windows найти программу
ос не имеет значания, если при перекодировании будет указана неправильная
исходная кодировка - результат будет тем-же.


Пользователь добавил сообщение 18 Июля 2016, 16:51:18:
Правильнее и проще перекодировать файлы только iso-8859* соответствующие кодировке CP1251:

1. Смотрим: есть ли, и сколько файлов с кодировкой iso-8859* (CP1251):
find -type f \( -iname "*.php" -o -iname "*.txt" -o -iname "*.html" \) -exec file -bi "{}" \; \
| grep -o 'charset=.*' | sed 's/^charset=//' | sort | uniq -c

2. Если есть, то перекодируем:
IFS=$'\n'; for F in $(find -type f \( -iname "*.php" -o -iname "*.txt" -o -iname "*.html" \)); \
do if [[ "$(file -bi "$F")" = *charset=iso-8859* ]]; then \
iconv -f CP1251 "$F" > ".tmp_file"; cat ".tmp_file" | tr -d '\r' > "$F"; \
echo "Успешно перекодирован файл: \"$F\""; fi; done | nl

3. Проверяем успешно перекодированые файлы.
« Последнее редактирование: 18 Июля 2016, 16:51:18 от renzrv »

Оффлайн jimfuny

  • Автор темы
  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: Как пакетно поменять кадировку у файлов
« Ответ #18 : 23 Июля 2016, 02:37:06 »

Если есть, то перекодируем:
IFS=$'\n'; for F in $(find -type f \( -iname "*.php" -o -iname "*.txt" -o -iname "*.html" \)); \
do if [[ "$(file -bi "$F")" = *charset=iso-8859* ]]; then \
iconv -f CP1251 "$F" > ".tmp_file"; cat ".tmp_file" | tr -d '\r' > "$F"; \
echo "Успешно перекодирован файл: \"$F\""; fi; done | nl

3. Проверяем успешно перекодированые файлы.


получилось изменить кодировку другом компьютере через windos изменила кодировку

в ubuntu у меня не получилось, более того не знаю что пробовала то есть как то увидела непонятные файлы которые мне показались вирусами и удалила их и после это все папки и файлы куда то делись, даже такие папки которые по умолчанию стоят в ubuntu стерлись, пишу стерлись потому что если бы удалились сами то были бы в корзине но их там не оказалось, и решила чтобы не портить ubuntu поменяла кодироку в windows есть программа хорошая

не знаю как закрыть тему

вам отдельное спасибо

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Как пакетно поменять кадировку у файлов
« Ответ #19 : 23 Июля 2016, 03:14:33 »
megallodon,
Принимаю благодарности, но проблем с перекодировкой iconv'ом нет и небыло.
Проблемы ты сама себе придумала и делала, и еще твой подход: что в Windows хорошо и просто, а в линуксе все сложно и неработает.

 

Страница сгенерирована за 0.058 секунд. Запросов: 23.