Смена кодировки сайта из CP1251 на UTF-8
13 Nov 2016 | Автор: dd |Перевозил тут пачку сайтов с LAMP на LNAMP, где фронтэндом выступает NGINX. И все бы ничего, если бы не пачка статических сателлитов в кодировке Windows-1251 (cp1251).
Как тут прикололся девака – при анализе сайта, надо сначала чекать кодировку и в случае обнаружения кодировки сайта cp1251 – проверку возраста можно не осуществлять. Но, тем не менее, в инетах до сих пор встречаются такие мастадонты, которые клепают сайты в кодировке CP1251.
Под апачем, при добавлении сайта в ISP Panel это даже не заметишь, а вот при попытке добавить этот же сайт в Vesta CP, получаешь гемор на задницу с крикозябрами. Поэтому надо редактировать конфиг Nginx, предварительно прикрутив туда виндовую кодировку. Но, насколько я помню, у меня этот танец с бубнами не задался и в тот раз, я просто повесил саты на LAMP.
Так что оставалось либо плясать с бубнами вокруг прикручивания виндовой кодировки к NGINX, либо перекодивать файлы в родную для нжинкса UTF-8. Сделать это можно средствами текстового редактора Notepad++ путем перевода кодировки документа и последующего сохранения; либо же в самом линухе. Как я выше заметил, саты статические, то есть на файлах, без использования базы данных. Поэтому перекодировать надо было именно файлы. С базой данных все происходило бы несколько иначе.
Перекодировка файла из CP1251 в UTF-8 производится в консоли через команду iconv
# iconv -f cp1251 -t utf8 FILE-CP1251 -o FILE-UTF8
либо же можно переписать файл в самого себя
# iconv -f cp1251 -t utf8 file.txt -o file.txt
Но поскольку мне надо было перекодировать большое число файлов php, содержащихся в разных папках, то мне пришлось составить небольшое предложение:
# find /path-to-files/ -type f -name \*php -exec iconv -f cp1251 -t utf-8 '{}' -o '{}' \;
Конвертит все в лет.
Для конвертации кодировок есть еще утилита enconv, входящая в состав пакета enca – вот он как раз конвертит сам в себя по умолчанию, перезаписывая файл выходной кодировкой:
# enconv -c file.txt
но, к сожалению, я его не смог подружить с русским языком, т.к даже при указании языка через ключик -L russian скрипт матерился на ошибки. Но с другой стороны, все нормально решилось и через iconv
Смена кодировки сайта из CP1251 на UTF-8,
Автор:Артем на 25 Dec 2017
Здравствуйте! Возникла необходимость сменить на сайте кодировку с ср1251 на utf-8. Файлов и папок много, помимо php, есть js, css и другие не считая уже картинок.
Попытался с помощью вашей чудной команды:
find /path-to-files(указав путь к папке с данными сайта/ -type f -name \*php -exec iconv -f cp1251 -t utf-8 ‘{}’ -o ‘{}’ \;
Но на некоторое время уходит в режим ожидания, потом появляется ошибка об завершении процесса ;-(
Подскажите, как побороть проблему и сменить кодировку у тучи файлов?
Заранее спасибо за ответ!
С уважением Артем.
[Reply]
anchous Reply:
December 26th, 2017 at 1:27 am
а что ошибка то говорит?
[Reply]
Автор:adenis на 17 Feb 2022
find . -type f -name ‘*.php’ -exec sed -i -r ‘s/\r$//g’ {} \;
[Reply]
Автор:adenis на 17 Feb 2022
Виноват, тот скрипт убирает символы переводы строк, лишние в linux) вот для смены кодировки
find . -name ‘*.php’ -exec enconv -L russian -x UTF-8 {} \;
[Reply]
Автор:PapaNT на 30 Mar 2023
Перекодировать имеющийся файл достаточно просто, но вот если прикладные логи пишутся в 1251, то сложный поиск с запуском awk из awk для парсинга одного файла с логом, а потом переходом на связанный с найденным с событием файл профилирования, мне пока не удалось
[Reply]