Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
mOops
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
1

Кириллица из xml

17.12.2017, 01:59. Просмотров 170. Ответов 5
Метки нет (Все метки)

Здраствуйте. Возникла проблема с отображением русского текста в QTableWidget на клиенте.

На серве лежит xml с кодировкой utf-16.
Данные парсятся в структуры и по запросам клиента отправляются также xml документами.
Подскажите, что делать.

Отправление данных с сервера::
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void ServerWindow::slotDataSend(QString dataToSend)
{
    QByteArray messageForSend;
 
    QDataStream sendStream(& messageForSend, QIODevice::ReadWrite);
    sendStream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
 
    sendStream << quint16(0) << dataToSend;
    sendStream.device()->seek(0);
    sendStream << (quint16)(messageForSend.size() - sizeof(quint16));
 
    tcpConnection->write(messageForSend);
}
dataToSend - :
C++
1
2
3
QDomDocument doc;
....
dataToSend = doc.toString();

Прием на клиенте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void MainWindow::readResponse()
{
    static quint16 nextBlockSize = 0;
    QByteArray tmpData;
 
    QDataStream stream(&MySocket::tcpSocket);
    stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
 
    while(true)
    {
        if(nextBlockSize == 0)
        {
            if(MySocket::tcpSocket.bytesAvailable() < sizeof(quint16))
                break;
            stream >> nextBlockSize;
        }
        if(MySocket::tcpSocket.bytesAvailable() < nextBlockSize)
            break;
 
        while(!stream.atEnd())
        {
            stream >> tmpData;
        }
        nextBlockSize = 0;
    }
    QDomDocument domDoc;
    domDoc.setContent(tmpData);
    QDomElement domElem = domDoc.documentElement();
 
    parseResponseType(domElem);
}
Для английского все работает без проблем, а с кириллицей беда..

P/s особо не ругаться, так как начинающий=)

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

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2017, 01:59
Ответы с готовыми решениями:

кириллица в отладчике
как поправить?

Кириллица в qDebug - C++ Qt
Доброго времени суток! Не выводит кириллицу в консоли Visual Studio 2015. ...

qt + dll + кириллица
Здравствуйте. Суть проблемы. Пишу dll для принтера (фискальника). Для печати...

JSON, кириллица
Добрый день. Подскажите, пожалуйста, решение. Есть строка QString hello =...

кириллица в QT4
При создании проекта в qt4, по указанному выше мануалу, в итоге не отображается...

5
TRam_
зомбяк
787 / 724 / 230
Регистрация: 14.05.2017
Сообщений: 2,476
17.12.2017, 02:16 2
А в дебаге не пробовали смотреть, на каком этапе портится кириллица? А то может она уже в самом начале, в dataToSend = doc.toString(); стала невалидной?
0
mOops
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
17.12.2017, 03:57  [ТС] 3
На клиенте считываются кракозябры, а с сервера все нормально уходит
Получается, проблема даже не с отображением в виджет, а с получением с сервера.
0
dizwebstudio
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 4
17.12.2017, 16:04 4
не пробывали отправить в utf-8
0
TRam_
зомбяк
787 / 724 / 230
Регистрация: 14.05.2017
Сообщений: 2,476
17.12.2017, 16:20 5
Цитата Сообщение от mOops Посмотреть сообщение
QByteArray tmpData;
Вероятно тут нужен не QByteArray, а QString (т.к. dataToSend был именно типа QString)
Цитата Сообщение от mOops Посмотреть сообщение
sendStream << quint16(0) << dataToSend;
И их этого QString генерировать текст с помощью QDomDocument::createTextNode.

Либо же не возиться со всем этим, и сделать
C++ (Qt)
1
QByteArray dataToSend = doc.toByteArray();
и тогда теоретически ошибка уйдёт
0
mOops
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
17.12.2017, 18:43  [ТС] 6
В utf-8 наоборот не пойдет

А можете мне объяснить, при отправлении я же эту самую dataToSend засовываю в QBateArray messageForSend, разве не так?

Добавлено через 53 минуты
Пришел домой, пересобрал проект и вот что:
1) краказябры появляются на стадии считывания из xml
2) если xml в utf-8 , то из нее читаются эти самые краказябры. Если xml в utf-16, то из нее просто ничего не читается, не могу понять почему

То есть проблема все таки со считыванием из хml .
0
17.12.2017, 18:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2017, 18:43

Кириллица в qDebug
Как правильно вывести русский текст через qDebug()?? Добавлено через 49...

qDebud() и кириллица
#include &lt;QtCore&gt; #include &lt;QApplication&gt; //#include &lt;QRegExp&gt; #include...

Кириллица в плагине TODO
В плагине для Qt Creator &quot;TODO&quot; вся кириллица (говорят, что и специальные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru