2015-08-15 3 views
-1

Я переключил саморазвитое веб-приложение на основе Perl/CGI и MySQL с одного сервера на другой, и с тех пор специальные символы из содержимого базы данных, такие как немецкие умлауты, показаны как черный бриллиант с вопросительный знак. Все остальное, даже текст с умляутами, который исходит из сценария, в порядке. После много исследований я до сих пор не знаю, что может вызвать проблему.Проблема с двойным кодированием с perl/cgi и mysql

Исходный сервер openSuSE 13.1 с Perl 5.18.1 и MySQL 5.6.25, а новый сервер - Debian 8 с Perl 5.20.2 и MySQL 5.5.44. Я передал все файлы с zipped tar-файлами и настроил MySQL и Apache одинаково, т. Е. Установил utf-8 и так далее. После сброса и восстановления sql-данных я смог проверить, что данные в новом MySQL прекрасны.

Я пробовал много вещей до сих пор, играя с использованием Encode и использую utf8 в Perl, устанавливая DBI с utf8, но ничего не помогает. Почувствуйте себя совершенно потерянным, поэтому любой намек ценится. Сообщите мне, нужна ли дополнительная информация.

С наилучшими пожеланиями, Uwe

+0

при подключении, у вас есть {mysql_enable_utf8 => 1} набор? – bytepusher

+0

Да, на новом сервере он установлен. На старом сервере мне это не нужно было по какой-то причине. – Adspectus

+0

хорошо, тогда вопрос, к сожалению, довольно широк: вам придется проверять каждый раз, когда поступают данные, и когда он выходит. use utf8, btw, только говорит, что символы в этом конкретном файле - utf8, поэтому большую часть времени это не помогает. использовать open ': std', ': encoding (UTF-8)'; должен гарантировать, что ваш выход на печать будет работать, поэтому, если выход печати будет искажен, тогда он, вероятно, отключится. Для более детального изучения utf8 см., Например, этот пост, я нашел полезным отладки моих собственных проблем: http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/6163129#6163129 – bytepusher

ответ

0

Почте предложил bytepusher помог мне. Когда я использую use utf8; И use open ':std', ':encoding(UTF-8)'; все работает нормально. Тем не менее, мне все еще интересно, почему он работал без этих утверждений на старой машине ...

Смежные вопросы