Смена кодировки сайта из 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

VN:F [1.9.21_1169]
Rating: 4.4/10 (23 votes cast)
VN:F [1.9.21_1169]
Rating: +1 (from 3 votes)
Смена кодировки сайта из CP1251 на UTF-8, 4.4 out of 10 based on 23 ratings

Теги: ,

Отзывов: 4 на «Смена кодировки сайта из CP1251 на UTF-8»

  1. Автор: Артем на 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:

    а что ошибка то говорит?

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 1.0/5 (1 vote cast)
    VN:F [1.9.21_1169]
    Rating: -1 (from 1 vote)
  2. Автор: adenis на 17 Feb 2022

    find . -type f -name ‘*.php’ -exec sed -i -r ‘s/\r$//g’ {} \;

    [Reply]

    VA:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.21_1169]
    Rating: -2 (from 2 votes)
  3. Автор: adenis на 17 Feb 2022

    Виноват, тот скрипт убирает символы переводы строк, лишние в linux) вот для смены кодировки

    find . -name ‘*.php’ -exec enconv -L russian -x UTF-8 {} \;

    [Reply]

    VA:F [1.9.21_1169]
    Rating: 3.0/5 (1 vote cast)
    VA:F [1.9.21_1169]
    Rating: 0 (from 0 votes)

Ваш отзыв