дергает данные из БД MSSQL и выводит на экран. Если запускать его в консоли, то кириллический текст выводится нормально. Если тот же скрипт использовать в качестве cgi-объекта, который отдает данные браузеру, то вместо русских символов я получаю знаки вопроса. И также в логах появляется следующее сообщение Message String: Some character(s) could not be converted into client's character set. Unconverted bytes were changed to question marks ('?') </code> . Текущая локаль пользователя, под которым я работаю UTF-8. Сам cgi стартует, я так понимаю, от пользователя apache и ему как-то надо менять локаль или я неправильно думаю?
Curl что показывает?
А \n\n в конце контент-тайпа тут не нужен?
Я использую так $query->header (-charset => 'UTF8'); Но мне кажется, проблема не в выхлопе, а еще на стадии получения данных скриптом, поскольку попутно ловлю еще ошибки DBD::Sybase::st fetchrow_hashref failed Что самое интересное, при этом данные, которые не в кириллице все равно выводятся корректно, несмотря на эту ошибку
Сча попробую
В другом скрипте не использовал, отрабатывало корректно
нужен, но у меня он чуть позже добавляется в хедере
Я бы попробовал без всяких модулей сначала шапку вернуть вручную, со \n\n, чтобы понять, где проблема
\r\n\r\n не?
Не, это для виндо-дрочеров:) я таким не занимаюсь:)
test done! 😂👍
Для линукса/юникса просто \n\n
И кстати, там просто \n\r:) если я кончено, не ошибся, пусть гуру поправят:)
Тоже самое показывает. При этом выхлоп в UTF8
А почему ты говоришь об мс сиквеле, хотя где-то упоминается сайбейз?
Потому что perl общается с MSSQL через Sybase
А можешь весь код показать?
Весь код скрипта или только какую-то определенную часть?
Хотябы верх скрипта, где модули подключаются, и где кодировка устанавливается
use DBI; use CGI; $query = CGI->new(); $query->header (-charset => 'UTF8'); print $query->header; my $startdate=$query->param('start_date'); $startdate=~s/-//g; my $enddate=$query->param('end_date'); $enddate=~s/-//g; my $dbh=DBI->connect('DBI:Sybase:server=server_name;database=database','login','password') or die "Couldn't connect to database: " . DBI->errstr;
Как-то не понятно. Sybase вполне себе самостоятельный сервер баз данных, MSSQL тоже. Я не могу понять "все глубину ваших глубин": сервер тянет у сервера, а прилага у одного из них?
Зачем? Я использую модуль DBI::Sybase для коннекта к MSSQL. Как такового сервера Sybase у меня нет. Да и когда гуглил про общение перла с MS, везде писалось именно про Sybase
а, понятно. юзаешь "драйвер" сайбэса для коннекта к...
Какая ОС? В какой кодировке сохранён скрипт? Какая кодировка у БД?
Centos 6, UTF8, Cyrillic_General_CI_AS
Это слишком изврат даже для меня)
use DBI; use CGI; use open ':std', ':encoding(UTF-8)'; print "Content-Type: text/html; charset=\"UTF-8\"\n\n"; Print "борода";
Не, тоже самое. Буду копать в сторону этой ошибки 99
Подожди то же самое, текст русский видишь или нет?
Нет, все те же знаки вопроса
Значит, БД отбрасываем
пишут можно ODBC драйвер использовать
Отбрось БД и добейся правильной кодировки в простом скрипте
Так я же говорю, что если просто так запустить скрипт, то все русские символы корректно отображаются
Просто так из консоли ты говорил, а через сервер?
А вот через сервер получаю знаки вопроса
Кто сервер?
Не совсем понял вопрос
Nginx, Apache?
Apache
Настройки апача смотри, сделай скрипт в три строчки с русскими буквами, и дрочи его, пока не получишь правильный результат
Ну вот так счас и делаю
Вот эта строчка тоже важна use open ':std', ':encoding(UTF-8)';
И так и так попробую
попробую ткнуть пальцем в небе, ибо с mod_perl вообще дело не имел никогда ) вы знаете, что в Centos по умолчанию локаль для процесса httpd выставлена так LANG=C это прописано тут /etc/sysconfig/httpd
Обсуждают сегодня