1

Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

Пробовал такие команды:
find /папка -name "*.php" -exec enconv -x UTF8 {} \;
find /папка -iname "*\.php" -exec enconv {} \;
find /папка -name "*.php" -exec enconv {} \;
find /папка -name "*.php" |enconv
find /папка -name "*.php" |enconv -x UTF-8
не конвертирует.

а вот эта:
find /папка -type f -iname "*\.php" -exec recode -f cp1251..utf8 {} \;
портит файлы, которые уже в кодировке UTF-8

Помогите пожалуйста.

2

h0lder пишет:

Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

проще скрипт написать, что-то типа(не проверил!) :

#!/bin/sh
TMP=`mktemp`
if file "$1" | grep -q 'UTF-8'; then
  echo "$1 уже перекодирован"
else
  iconv -f cp1251 $1 >$TMP || exit
  mv --backup "$TMP" "$1" || exit
fi

и вперёд

 Консоль:
find . -name "*.php" -exec ./convert1251toutf-8.sh {} \;

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

3

h0lder, попробуйте вместо enconv использовать enca — она с кодировками, IMHO, более корректно обращается, лишний раз не перекодирует.

Был, был и весь вышел...

4

drBatty пишет:
h0lder пишет:

Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

проще скрипт написать, что-то типа(не проверил!) :

#!/bin/sh
TMP=`mktemp`
if file "$1" | grep -q 'UTF-8'; then
  echo "$1 уже перекодирован"
else
  iconv -f cp1251 $1 >$TMP || exit
  mv --backup "$TMP" "$1" || exit
fi

и вперёд

 Консоль:
find . -name "*.php" -exec ./convert1251toutf-8.sh {} \;

Создает рядом с файлом file.php новый файл file.php~
Но file.php~ по прежнему в cp1251

Файлы в UTF-8 не трогает, написав "уже перекодирован". Тут все ОК.

5

h0lder пишет:

Создает рядом с файлом file.php новый файл file.php~
Но file.php~ по прежнему в cp1251

тот что с ~ - это не новый, а старый файл. Сохраняется в целях бекапа. Если не нравится - уберите ключ --backup, но это не надёжно...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

6 (18.01.2012 14:21:00 отредактировано h0lder)

вот это я дал...
все уже давно работает

в тестовых файлах не было русских букв, поэтому и не конвертировало в utf8

7

скрипт на некоторых файлах выдает:

iconv: illegal input sequence at position *** (iconv: недопустимая входная последовательность в позиции ***)

Как с этим справиться?

8

 Консоль:
doc@dt:~/cp$ iconv --help
Использование: iconv [КЛЮЧ...] [ФАЙЛ...]
Преобразует указанные файлы из одной
кодировки в другую.

Спецификация формата ввода/вывода:
  -f, --from-code=ФАЙЛ   кодировка оригинального
                             текста
  -t, --to-code=ФАЙЛ     кодировка для вывода

Информация:
  -l, --list                 перечислить все известные
                             встроенные кодировки

Усправление выводом:
  -c                         пропускать на выводе
                             недопустимые знаки
  -o, --output=FILE          выходной файл
  -s, --silent               не печатать предупреждения
                           
      --verbose              печатать информацию о ходе
                             работы

  -?, --help                 Выдает этот справочный
                             список
      --usage                Выдает краткую информацию
                             об использовании
  -V, --version              Печатает версию программы

Обязательные или необязательные аргументы
для длинных ключей также являются
обязательными или необязательными для
соответствующих коротких ключей.

Инструкции по сообщению об ошибках
смотрите на
<http://www.gnu.org/software/libc/bugs.html>.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)