crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
Zizilk
  опции профиля:
сообщение 21.8.2010, 2:23
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Двигаюсь по своим задачам и столкнулся с проблемой.

Появилась необходимость получить из бд русские символы и отослать их в php по сокету.
Казалось бы всё хорошо и отлично получает, НО вместо вожделенного "Прайм" в php доходит "??N??°????".
Я слышал что бывают запары с кодировкой, но надеялся что инфу не будет перекодировать QT полученную из бд.
Как с этим бороться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.8.2010, 8:19
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Zizilk @ 21.8.2010, 6:23) *
Как с этим бороться?
для начала выясни, где проблема. Выведи в QLabel то что получил из БД. Если вывод корректный, значит проблема дальше.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 10:32
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня консольное приложение. Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 10:38
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


Цитата(Zizilk @ 21.8.2010, 10:32) *
У меня консольное приложение. Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики

для начала определи в какой кодировке у тебя база, в какой кодировке ты из нее получаешь данные и в какой кодировке нужно передать данные в пхп!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 10:43
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


баз в UTF8 а как определить в какой её получаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 10:48
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


для этого нужно знать КАК ты ее получаешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.8.2010, 10:50
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Zizilk @ 21.8.2010, 14:32) *
Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики
в консоли своя собственная кодировка. поэтому выводить нужно так:
QTextCodec *outCodec = QTextCodec::CodecForName("кодировка консоли");
QTextStream out(stdout);
out.setCodec(outCodec);
out << myvar << endl;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 10:55
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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);
            }


Сообщение отредактировал Zizilk - 21.8.2010, 10:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 11:20
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


для начала проверь тип 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
  // 
}


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

Сообщение отредактировал DIMEDROLL - 21.8.2010, 11:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.8.2010, 11:21
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Zizilk @ 21.8.2010, 14:55) *
Ну мне гораздо важнее чтобы всё нормально выглядело в php
Цитата(Litkevich Yuriy @ 21.8.2010, 12:19) *
для начала выясни, где проблема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 11:42
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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 не получилось, тк я не нашёл какая кодировка в консоли
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 11:54
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


значит QVariant хранит QByteArray, там где // тут будем раскодировать напиши:

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

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

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

У тебя какая ОСь и язык ОСи(локаль)? Какая кодировка консоли?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 12:03
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ось win 7 starter но прога планируется будет работать под убунтой.
Язык оси вроде русский, с кодировкой консоли разобраться не могу), только знаю, что её не трогал)

Супер) помогло)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 12:12
Сообщение #14


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


а как ты в пхп передаешь? он ведь тоже принимает какую то свою кодировку, которая где то в конфиге прописывается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zizilk
  опции профиля:
сообщение 21.8.2010, 12:18
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.7.2010
Пользователь №: 1902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Через сокеты, передаю) Но факт в том, что сейчас у меня заработало)
$out = socket_read($socket, 2048);

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

В php единственный раз когда пришлось лезть в конфиг когда разблочивал сокеты. До этого на php работал с базами данных mysql(в том числе и с той в которой сижу конкретно сейчас) и проблем никогда не было
Но факт в том, что сейчас у меня заработало)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 21.8.2010, 12:37
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

Спасибо сказали: 23 раз(а)




Репутация:   0  


сейчас все работает потому что кодировка ОСи и ПХП совпадают, на убунте могут быть баги, так же как и на какой то Французкой винде... но ладно, не буду больше тебя доставать вопросами)
вот только посоветую почитать хорошую статью про все эти кодировки и юникод
статью, кстати, было бы неплохо перевести на русский(если еще не перевели)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.6.2025, 22:35