UTF8 - кривые преобразования

Материал из Lblss.ru
Перейти к: навигация, поиск

Преамбула

Как то после падения дамп базы MediaWiki был перенесен на другой сервер, однако, в базе получилась каша. Удалось нагуглить вот эту статью, где автор описал свою аналогичную проблему и способ решения. В общем то, базу удалось восстановить аналогичным образом. Однако, меня совсем не устроило, что в базу с кодировкой utf8 данные пишутся перебитыми в cp1251. Пришлось копнуть конфиг LocalSettings.php. Там мое внимание привлек такой параметр:

# Experimental charset support for MySQL 4.1/5.0.
$wgDBmysql5 = false;

Покопавшись в описании конфига MediaWiki, сделал для себя открытие, что этот параметр устанавливает кодировку соединения с базой utf8. И действительно, после изменения значения в true в базу стал писаться нормальный текст. Ниче се, очень интуитивно понятное имя параметра и его описание ))) Ладно, оставим это на совести авторов... Так что, по хорошему, должно быть вот так:

# Experimental charset support for MySQL 4.1/5.0.
$wgDBmysql5 = true;

Некоторые соответствия

Ежели utf8 записали в базу как cp1251 или latin1, получается нечитаемый текст примерно с таким соответствием символов:

cp1251 latin1 cp1251 latin1
Р° а а А А
б б Б Б
РІ в в Р’ Ð’ В
Рі г г Г Г
Рґ д д Д Д
Рµ е е Е Е
Ñ‘ ё Ё Ё
ж ж Ж Ж
з з Р— З З
Рё и и И И
й й Й Й
к к Рљ К К
Р» л л Л Л
Рј м м Ðœ М
РЅ н н Н Н
о о О О
п п П П
СЂ Ñ€ р Ð Р
СЃ с с С С
С‚ Ñ‚ т Т Т
у у У У
Ñ„ ф Ф Ф
Ñ… х Ð¥ Х
С† ц ц Ц Ц
ч ч Ч Ч
С€ ш ш Ш Ш
С‰ щ щ Щ Щ
СЊ ÑŒ ь Ь Ь
С‹ Ñ‹ ы Ы Ы
РЄ Ъ Ъ РЄ Ъ Ъ
СЌ э э Р­ Э Э
СЋ ÑŽ ю Р® Ю Ю
СЏ я я РЇ Я Я
Персональные инструменты