Кодировки из коробки


Все проекты, с которыми я работал в последнее время, используют кодировку utf8, и всё было хорошо, пока файлы лежали на сервере. Но в какой-то момент мне надоело из-за любой мелкой правки ползать куда-то там по ssh, да и сетевые задержки иногда утомляли. Тогда я решил в очередной раз поднять локальный сервер.

Процедура установки LAMP-сервера на ubuntu не представляет собой никаких сложностей, всё ставится из репозитория. На Windows был установлен Denwer, который так же ставится буквально одной кнопкой. А вот дальше началось веселье.

Пингвин с вопросами

После поднятия проекта из svn-репозитория и импорта mysql-дампа открываю страницу в браузере и вижу смесь «французского с нижегородским»: где-то нормальная кириллица, а где-то вопросительные знаки. Это «где-то» оказалось результатами выборки из mysql. Многочисленные эксперименты по смене сопоставления ни к чему не привели и поэтому я полез читать интернет. Решение было найдено быстро:

  • Открываем /etc/mysql/my.cnf
  • Находим секцию [mysqld]
  • Добавляем две строчки

skip-character-set-client-handshake<br /> default-character-set=utf8

Первая заставляет mysql игнорировать кодировку, которая пришла от клиента и использовать кодировку по умолчанию. Кодировка по умолчанию как раз и выставляется вторым параметром.

Не забываем перезапустить mysql-сервер:

$ sudo service mysqld restart

Это не по-джентельменски

В джентельменском наборе веб-разработчика всё оказалось немного хуже. В этом во многом замечательный продукте везде гвоздями прибито использование кодировки windows-1251. Дескать на винде работаем, вот и кодировку берём от неё.

Для наставления Денвера на путь истинный нужно исправить конфигурационные файлы апача и mysql.

Настройки для веб-сервера apache ( %Denwer%/usr/local/apache/conf/httpd.conf, где %Denwer% — каталог, в который вы установили Denwer):

  • Находим директиву AddDefaultCharset windows-1251 (примерно 484 строка файла)
  • Меняем на AddDefaultCharset utf-8

Настройки для сервера mysql ( %Denwer%/usr/local/mysqld-5.1/my.cnf):

  • Находим строки

default-character-set = cp1251<br /> init-connect = "set names cp1251"

  • Меняем на

default-character-set = utf8<br /> init-connect = "set names utf8"

Перезапускаем Denwer и наслаждаемся нормальными русскими буквами.