crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Получение из бд русских символов и их пересылка в php
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
DIMEDROLL Дата 21.8.2010, 12:37
  сейчас все работает потому что кодировка ОСи и ПХП совпадают, на убунте могут быть баги, так же как и на какой то Французкой винде... но ладно, не буду больше тебя доставать вопросами)
вот только посоветую почитать хорошую статью про все эти кодировки и юникод
статью, кстати, было бы неплохо перевести на русский(если еще не перевели)
Zizilk Дата 21.8.2010, 12:18
  Через сокеты, передаю) Но факт в том, что сейчас у меня заработало)
$out = socket_read($socket, 2048);

На клиентской стороне стоит такой кусок кода, который принимает глыбу данных(в виде строки) от сервера, в которую входит и та самая злополучная строка. После чего она распиливается.

В php единственный раз когда пришлось лезть в конфиг когда разблочивал сокеты. До этого на php работал с базами данных mysql(в том числе и с той в которой сижу конкретно сейчас) и проблем никогда не было
Но факт в том, что сейчас у меня заработало)
DIMEDROLL Дата 21.8.2010, 12:12
  а как ты в пхп передаешь? он ведь тоже принимает какую то свою кодировку, которая где то в конфиге прописывается...
Zizilk Дата 21.8.2010, 12:03
  Ось win 7 starter но прога планируется будет работать под убунтой.
Язык оси вроде русский, с кодировкой консоли разобраться не могу), только знаю, что её не трогал)

Супер) помогло)
DIMEDROLL Дата 21.8.2010, 11:54
  значит QVariant хранит QByteArray, там где // тут будем раскодировать напиши:

QByteArray bytes = v.toByteArray();
QString result = QString::fromUtf8(bytes.constData(), bytes.size());

теперь в result у тебя валидная строка и ее можно вывести в консоль или куда тебе угодно

см.:
QString::toAscii ()
QString::toLocal8Bit ()

У тебя какая ОСь и язык ОСи(локаль)? Какая кодировка консоли?
Zizilk Дата 21.8.2010, 11:42
 
Цитата(DIMEDROLL @ 21.8.2010, 12:20) *
для начала проверь тип QVariant:
QVariant v = squery.value(rec.indexOf("name"));
if (v.type() == QVariant::ByteArray) {
  // print to console
  // тут будем раскодировать
} else if (v.type() == QVariant::String) {
  // print to console
  //
}


и ты не ответил, какую кодировку хочет пхп?

PHP я пробовал разную кодировку, как менял в сорцах, так и в браузере, результат почти всегда один ток вместо нака градуса ромб с вопросом получается.


Тогда ща поколдую, вnx и с выводом в консоль

Значит попробовал сделать ту вилку которую ты сказал.
Пошёл по первой ветви, где у тя написанно "будем раскодировать."

Вывесит в консоль как говорил Litkevich Yuriy не получилось, тк я не нашёл какая кодировка в консоли
Litkevich Yuriy Дата 21.8.2010, 11:21
 
Цитата(Zizilk @ 21.8.2010, 14:55) *
Ну мне гораздо важнее чтобы всё нормально выглядело в php
Цитата(Litkevich Yuriy @ 21.8.2010, 12:19) *
для начала выясни, где проблема.
DIMEDROLL Дата 21.8.2010, 11:20
  для начала проверь тип QVariant:
QVariant v = squery.value(rec.indexOf("name"));
if (v.type() == QVariant::ByteArray) {
  // print to console
  // тут будем раскодировать
} else if (v.type() == QVariant::String) {
  // print to console
  //
}


и ты не ответил, какую кодировку хочет пхп?
Zizilk Дата 21.8.2010, 10:55
 
Цитата(Litkevich Yuriy @ 21.8.2010, 11:50) *
Цитата(Zizilk @ 21.8.2010, 14:32) *
Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики
в консоли своя собственная кодировка. поэтому выводить нужно так:
QTextCodec *outCodec = QTextCodec::CodecForName("кодировка консоли");
QTextStream out(stdout);
out.setCodec(outCodec);
out << myvar << endl;


Ну мне гораздо важнее чтобы всё нормально выглядело в php на саму консоль мона сказать плевать(в неё выводил ток для дебага)



а получаю так
QString query="SELECT name FROM `Galaxy` where (`id`='"+QString::number(coord)+"');";
            qDebug()<<QTime::currentTime()<<"SL> querry "<<query;
            QSqlQuery squery;
            if (!squery.exec(query))
            {
                qDebug()<<QTime::currentTime()<<"SL> query wasn't execute !!! WTF you wrote in SQL sintax?? Oo";
                return QString::number(-2);
            }
            else
            {
                QSqlRecord rec = squery.record();
                if (squery.next())
                {
                    pname=squery.value(rec.indexOf("name")).toString();
                    qDebug()<<QTime::currentTime()<<"SL> pname "<<pname;
                }
                else
                    return QString::number(-1);
            }
Litkevich Yuriy Дата 21.8.2010, 10:50
 
Цитата(Zizilk @ 21.8.2010, 14:32) *
Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики
в консоли своя собственная кодировка. поэтому выводить нужно так:
QTextCodec *outCodec = QTextCodec::CodecForName("кодировка консоли");
QTextStream out(stdout);
out.setCodec(outCodec);
out << myvar << endl;
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 2:08