169 похожих чатов

Господа, вопрос есть, мобыть не в тему. Есть скрипт, который

дергает данные из БД 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 и ему как-то надо менять локаль или я неправильно думаю?

44 ответов

31 просмотр

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

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта