Как избавиться от «кракозябров» и решить проблему с кодировкой

Наверное, каждому вебмастеру знакома ситуация, когда после переезда, переустановки ПО на сервере, либо по какой-то другой причине, на сайте появляются кракозябры, вопросики и т.д. В данной статье я расскажу как можно исправить эту проблему (как ее избежать я описал вот здесь). Сразу скажу, что не всегда можно восстановить исходные данные, но об этом немного позже.

И так, что мы имеем? А имеем мы следующее: дамп БД и движок (форум, магазин, каталог, CMS и т.д), на котором «почему-то» все отображается не так, как бы нам хотелось.
Первое, что мы сделаем, это проверим отображение кириллицы в дампе, чтобы разобраться, как поступить дальше.
Примечание: если вместо «кракозябров» Вы наблюдаете знаки вопроса, то проблема заключается в некорректной настройке скрипта/mysql-сервера для работы с Вашей БД. В данном случае можно сразу перейти к пункту 2.1

1.1 Открываем дамп Вашей БД текстовым редактором.

Дополнение: я рекомендую использовать EmEditor. Это довольно мощный текстовый редактор, который позволяет автоматически определять кодировку(и) текста в файле.

1.2 Ищем кириллический текст.

Дополнение: быстрее всего будет найти его в таблице сообщений, что мы и сделаем. Нажимаем Ctrl + F, вводим «`post`» (вместо post вы должно ввести имя своей таблицы с сообщениями, либо другой таблицы, где хранится кириллица, без двойных кавычек) и нажимаем Enter.

1.3 Если текст читаем и отображается корректно, тогда переходим к пункту 2.1, в противном случае продолжаем с пункта 1.4.

1.4 Нажимаем File — Reload — Detect All.

Дополнение: редактор выдаст список кодировок. Если их несколько, значит разные участки дампа сохранены в различных кодировках. Перебирайте их по очереди, пока не добьетесь корректного отображения. Если кириллица так и не отобразилась, тогда попробуйте сверить строку с Вашими кракозябрами вот с этой табличкой, далее сохраняете файл дампа в кодировке со второй колонки и выполните File — Reload — Кодировка с первой колонки. Если и здесь все безрезультатно, то, по всей видимости, кириллический текст был перекодирован несколько раз и восстановить его уже невозможно. Последней надеждой может оказаться этот сервис, который поддерживает все основные кодировки, а также умеет работать в автоматическом режиме.

Дополнение № 2: возможна ситуация, когда в дампе присутствуют «кракозябры» нескольких видов, либо содержится как текст, так и «кракозябры» — это означает, что данные в Вашей БД хранятся в различных кодировках. В этом случае обрабатывать дамп нужно по частям, но это уже тема для отдельной статьи.

1.5 Мы добились корректного отображения кириллического текста в дампе, теперь можно попытаться его импортировать и подключить к движку, но я рекомендую перейти к пункту 2.1.

Вторым этапом будет настройка движка для работы в корректной кодировке. Я уже рассказывал об этом более подробно в предыдущей статье о кодировках, поэтому здесь мы опустим описания и пояснения, а сразу перейдем к технической части.

2.1. Снова открываем дамп БД и смотрим кодировку таблиц, структура и содержимое которых было записано в дамп.

Дополнение: Нажимаем Ctrl + F и вводим «CHARSET=» (без кавычек). Если значение charset отлично, от той кодировки, в которой вы сохранили дамп, тогда при импорте нужно использовать принудительное указание кодировки (читаем здесь).

2.2. Создаем БД в кодировке, которую мы только что узнали. Если кроме кодировки в дампе описано еще и сопоставление(сравнение) то запомните его.

2.3. Открываем файл инициализации соединения с БД (обычно это init.php, global.php, connect.php db.php и т.д) и делаем следующее:

Примечание: в vBulletin функция указания явной кодировки уже описана в includes/class_core.php, Вам необходимо только раскомментировать следующую строку в includes/config.php:

//$config[‘Mysqli’][‘charset’] = ‘utf8’;

и заменить utf8 на cp1251, если Ваш дамп в cp1251.

Для других движков сразу после db_connect добавляем:

mysql_query(«SET NAMES ‘X’ COLLATE ‘Y»»);

где X — кодировка БД, Y — сопоставление. (если Вы не знаете сопоставления, тогда удалите из запроса «COLLATE ‘Y'»).

2.4. Восстанавливаем дамп БД.

Дополнение: при восстановлении БД рекомендую пользоваться скриптом SypexDumper.

Вот, собственно, и все. С удовольствием выслушаю любую критику, а также отвечу на вопросы в комментариях.

Как избавиться от «кракозябров» и решить проблему с кодировкой: 14 комментариев

  1. Приветствую Предлагаю обмен ссылками (постовыми) вашего блога blog.older.su с моим.
    Заранее благодарен за ответ.
    С уважением, Александр.

  2. А у меня не получилось. Редактор не показал русские символы, какую кодировку я не выбирал. Вот онлайн сервис определил и отобразил русские символы но толку? Кусками перекодировал и вставлял в редактор, в итоге дампер отказался заливать дамп, ссылаясь на ошибку в данных.
    При открывании дампа в кодировке ЮТФ-8 (именно так база настроена, но все посты в вин1251) вижу вот такие символы ‘Информирует о сообщении’

  3. забыл дописать, что сами посты в редакторе отображаются уже в другой кодировке: (‘moderator’,’Ìîäåðàòîðû’,3,»,0)

  4. Необходимо пересохранять дамп в другой кодировке опираясь на данные из таблицы.

  5. Спасибо друг. Благодаря твоей статье смог перекодировать на одном из сайтов базу сохраненную в 1252 и оторажаемую как UTF8 в нормальный вид, теперь в phpmyadmin нормально все отображается и на сайте тоже.

    Долго искал решение, вот тут частично нашел.
    Сделал дамп.
    Открыл, сохранил в вин1252, переоткрыл в UTF8 и вуаля дамп стал нормальный, залил дамп обратно в базу.

    Удачи, уважаемый.

  6. А что делать если форум по основному домену работает нормально, а на зеркале кракозябры на белом фоне ?
    Хостинг покупал на http://www.toobit.ru
    Может причина у провайдера ?

  7. Вот что то типа такого:

    &zjжCpKђКNЬ)tШЫЦнV—pµ%+ar1Y…ѕxФюЎsшмL /yщr“+©(]ўўWьЎОеА‡IдЯ3)си’жN’H“ ®ў‘1вБ†Њ&‹#HЕ8pЖЊ¶ ©ж*iиV-*гцBSнWRЪ«Wыы•р‚›ѓГ5@У*t›™кl8UD№7Mfаа{г~ћ2‚Ш™3є¬љ4CAn%grdЅКЩ©¬jfAхЇщЅ™Л–VМѓбш|њ$·вeLџ·ПЫЇh^yHФћѓє¬ВCe%І^%*«<Ёю-dK+рАфHp{QЮЩьх‚EжЖФп-Сћ+4©Й®l№{П-‡1±М,©а”GD,g$ч–Е$ чк: Ї
    ч2ИїЖЉЄ‡diOЌ±ЉъєшкUA•CEK¦n%®Ё®iР6hЁРґWI‡v&ISs…bѕPјщЦYХ‰HXЛґЅТ ТІж’BЁыFюHЕ‰ИЉoЌЅY]ЭЇ(.ткќпќv©¦n«°кЊ?щу|ЪЁшкЂюs+ѓ№Wх·B]·ґXЈ‚м кPkї]0KІИaКЄAr§Щ»e«ifкјl

  8. Смотреть нужно. Зеркала на разных серверах?

  9. Это что-то со скриптом, не в кодировке дело.

  10. Статья канешно очень хорошая и в ней много полезного, один раз разобрался, но теперь уже не смог так как не пойму проблему!
    Автор у меня есть большая просьба к тебе, прошу удели мне немного внимания, вот мой скайп:baiet_rau_nicu , пожалуста добавься :)!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *