Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25

FrameWork QT. Проблемы с кодировкой при открытии xml файла

15.08.2022, 13:01. Показов 5795. Ответов 28

Студворк — интернет-сервис помощи студентам
Здравствуйте, ребята. Я относительно недавно начал изучать данный FrameWork, поэтому не судите строго. Я пытаюсь создать конвертер валют. Я получаю запрос с официального банка с текущими курсами валют. XML-файл скачивается с кодировкой windows-1251. При обычном открытии файла и вывода его данных в textEdit (файл выводится с кракозябрами в тех местах, где в файле кириллица). А уже, когда я хочу открыть данный xml файл для парсинга данных через QXmlStreamReader, у меня возникает ошибка "Encoding windows-1251 is unsupported". Как мне устранить эту проблему? Очень выручите, а то я на этом застрял и в интернете ничего не могу найти. Снизу прикрепил, два скрина и исходники всей программы.



C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
//MAIN.CPP
#include "converter_da.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    converter_da w;
    w.show();
    return a.exec();
}
C++ (Qt)
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
//DONWLOAD.H
#ifndef DONWLOAD_H
#define DONWLOAD_H
 
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QUrl>
#include <QDebug>
 
class donwload : public QObject
{
    Q_OBJECT
public:
    explicit donwload(QObject *parent = 0);
 
signals:
    void onReady();
public slots:
    void getData();       //метод инициализации запроса на получение данных
    void onResult(QNetworkReply *reply); //слот обработки ответа о полученных данных
private:
    QNetworkAccessManager *manager; //менеджер сетевого доступа
};
 
#endif // DONWLOAD_H
C++ (Qt)
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
32
33
34
35
36
37
38
39
//DONWLOAD.CPP
#include "donwload.h"
 
donwload::donwload(QObject *parent) : QObject (parent)
{
  /*инициализация менеджера*/
  manager = new QNetworkAccessManager;
 
  /*подключаю сигнал о завершении получения данных к обработчику полученного ответа*/
  connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onResult(QNetworkReply*)));
}
 
void donwload::getData()
{
  QUrl url("https://www.cbr.ru/scripts/XML_daily.asp?date_req=14/08/2022"); //URL, через который буду получать данные
  QNetworkRequest request;   //отправляю запрос
  request.setUrl(url);       //устанавливаю URL в запрос
  manager->get(request);     //выполняю запрос
}
 
void donwload::onResult(QNetworkReply *reply)
{
    //если в процессе получения данных произошла ошибка
    if(reply->error()){
        qDebug() << "ERROR";
        qDebug() << reply->errorString();
    }
    else {
    //если ошибки не произошло, то создаю объект для работы с файлом
      QFile *file = new QFile("C:/example/file.xml");
      //создаем файл или открываем на перезапись
      if(file->open(QFile::WriteOnly)){
          file->write(reply->readAll());
          file->close();
      }
      qDebug() << "Donwloading is completed";
      emit onReady();
    }
}
C++ (Qt)
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
32
33
34
//converter_da.h
#ifndef CONVERTER_DA_H
#define CONVERTER_DA_H
 
#include <QWidget>
#include <QPainter>       //для отрисовки
#include <QStyleOption>   //для отрисовки
#include "donwload.h"
#include <QXmlStreamReader>
#include <QtXml>
#include <QStringList>
 
QT_BEGIN_NAMESPACE
namespace Ui { class converter_da; }
QT_END_NAMESPACE
 
class converter_da : public QWidget
{
    Q_OBJECT
 
public:
    converter_da(QWidget *parent = nullptr);
    ~converter_da();
    void setInterface();
protected:
    void paintEvent(QPaintEvent *event);
private slots:
    void parsFile();
private:
    Ui::converter_da *ui;
    donwload * donwloader; //объявляем объект класса для скачивания данных по http
 
};
#endif // CONVERTER_DA_H
C++ (Qt)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//converter_da.cpp
#include "converter_da.h"
#include "ui_converter_da.h"
#include "stylehelper.h"
#include <QDebug>
#include <QString>
#include <QMessageBox>
#include <QIODevice>
 
converter_da::converter_da(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::converter_da)
{
    ui->setupUi(this);
    setInterface();
    donwloader = new donwload(this);
    /*по нажатию на кнопку запускается получение данных по http*/
    connect(ui->pushButton, SIGNAL(clicked(bool)), donwloader, SLOT(getData()));
    connect(donwloader, SIGNAL(onReady()), this, SLOT(parsFile()));
 
 
}
 
converter_da::~converter_da()
{
    delete ui;
}
 
/*установка интерфейса*/
void converter_da::setInterface()
{
 ui->lineEdit->setStyleSheet(styleHelper::getStyleLineEdit());
 ui->lineEdit_3->setStyleSheet(styleHelper::getStyleLineEdit());
 ui->comboBox->setStyleSheet(styleHelper::getStyleComboBox());
 ui->comboBox_2->setStyleSheet(styleHelper::getStyleComboBox());
 setWindowIcon(QIcon(":/img/img/icon.png"));
 ui->comboBox->addItem(QIcon(":/img/img/rus.png"), "RUS");
 ui->comboBox->addItem(QIcon(":/img/img/amd.png"), "AMD");
 ui->comboBox->addItem(QIcon(":/img/img/aud.png"), "AUD");
 ui->comboBox->addItem(QIcon(":/img/img/azn.png"), "AZN");
 ui->comboBox->addItem(QIcon(":/img/img/bgn.png"), "BGN");
 ui->comboBox->addItem(QIcon(":/img/img/brl.png"), "BRL");
 ui->comboBox->addItem(QIcon(":/img/img/byn.png"), "BYN");
 ui->comboBox->addItem(QIcon(":/img/img/cad.png"), "CAD");
 ui->comboBox->addItem(QIcon(":/img/img/chf.png"), "CHF");
 ui->comboBox->addItem(QIcon(":/img/img/cny.png"), "CNY");
 ui->comboBox->addItem(QIcon(":/img/img/czk.png"), "CZK");
 ui->comboBox->addItem(QIcon(":/img/img/dkk.png"), "DKK");
 ui->comboBox->addItem(QIcon(":/img/img/eur.png"), "EUR");
 ui->comboBox->addItem(QIcon(":/img/img/gbp.png"), "GBP");
 ui->comboBox->addItem(QIcon(":/img/img/hkd.png"), "HKD");
 ui->comboBox->addItem(QIcon(":/img/img/huf.png"), "HUF");
 ui->comboBox->addItem(QIcon(":/img/img/inr.png"), "INR");
 ui->comboBox->addItem(QIcon(":/img/img/jpy.png"), "JPY");
 ui->comboBox->addItem(QIcon(":/img/img/kgs.png"), "KGS");
 ui->comboBox->addItem(QIcon(":/img/img/krw.png"), "KRW");
 ui->comboBox->addItem(QIcon(":/img/img/kzt.png"), "KZT");
 ui->comboBox->addItem(QIcon(":/img/img/mdl.png"), "MDL");
 ui->comboBox->addItem(QIcon(":/img/img/nok.png"), "NOK");
 ui->comboBox->addItem(QIcon(":/img/img/pln.png"), "PLN");
 ui->comboBox->addItem(QIcon(":/img/img/ron.png"), "RON");
 ui->comboBox->addItem(QIcon(":/img/img/sek.png"), "SEK");
 ui->comboBox->addItem(QIcon(":/img/img/sgd.png"), "SGD");
 ui->comboBox->addItem(QIcon(":/img/img/tjs.png"), "TJS");
 ui->comboBox->addItem(QIcon(":/img/img/tmt.png"), "TMT");
 ui->comboBox->addItem(QIcon(":/img/img/try.png"), "TRY");
 ui->comboBox->addItem(QIcon(":/img/img/uah.png"), "UAH");
 ui->comboBox->addItem(QIcon(":/img/img/usd.png"), "USD");
 ui->comboBox->addItem(QIcon(":/img/img/uzs.png"), "UZS");
 ui->comboBox->addItem(QIcon(":/img/img/zar.png"), "ZAR");
}
 
 
/*отрисовка заднего фона*/
void converter_da::paintEvent(QPaintEvent *event)
{
  QStyleOption so;
  so.initFrom(this);
  QPainter p(this);
  style()->drawPrimitive(QStyle::PE_Widget, &so, &p, this);
  QWidget::paintEvent(event);
}
 
void converter_da::parsFile()
{
    QFile file("C:/example/file.xml");
    if(!file.open(QIODevice::ReadOnly)){
       qDebug() << "error file!!!!!!1";
       return;
    }
    else {
        QXmlStreamReader xml(&file);
        do {
        xml.readNext();
        qDebug() << xml.name();
        } while(!xml.atEnd());
        if (xml.hasError()) {
        qDebug() << "Error:" << xml.errorString();
        }
        file.close();
    }
}
C++ (Qt)
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
32
//converter_da.pro
QT       += core gui network xml
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
CONFIG += c++17
 
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
SOURCES += \
    donwload.cpp \
    main.cpp \
    converter_da.cpp \
    stylehelper.cpp
 
HEADERS += \
    converter_da.h \
    donwload.h \
    stylehelper.h
 
FORMS += \
    converter_da.ui
 
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
 
RESOURCES += \
    resourse.qrc
Миниатюры
FrameWork QT. Проблемы с кодировкой при открытии xml файла   FrameWork QT. Проблемы с кодировкой при открытии xml файла  
Вложения
Тип файла: rar converter.rar (4.95 Мб, 0 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2022, 13:01
Ответы с готовыми решениями:

Ошибка с кодировкой при открытии *.doc файла
Когда я открываю в richtextbox doc-файл у меня выводится непонятный набор символов.я так понимаю ,что ошибка в кодировке,подскажите...

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

Проблемы с кодировкой при подключении текстового файла
Проблема вот в чем...В файле question.txt лежит вопрос, написанный по русски, но когда в консоле я вывожу содержимое...

28
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25
16.08.2022, 17:03  [ТС]
Студворк — интернет-сервис помощи студентам
Вот, я меняю в строке <?xml version="1.0" encoding="windows-1251"?> на UTF-8. И при этом еще сохраняю в кодировке UTF-8 и тогда все работает и считывается.
Вложения
Тип файла: rar XM.rar (1.7 Кб, 9 просмотров)
0
 Аватар для kapbepucm
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
16.08.2022, 18:15
Лучший ответ Сообщение было отмечено Данил2003 как решение

Решение

Проблема понятна. Очередная версия: учтены последние пожелания, также думаю, сохранять в файл необязательно:
C++ (Qt)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
#include <QApplication>
#include <QPushButton>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QXmlStreamReader>
#include <QComboBox>
 
class Manager: public QNetworkAccessManager
{
  void replyFinished(QNetworkReply* reply)
  {
    if (!reply->error()) {
      QXmlStreamReader xml(toUtf8(reply->readAll()));
      QComboBox* box = new QComboBox;
      box->setAttribute(Qt::WA_DeleteOnClose);
      while (!xml.atEnd()) {
        xml.readNext();
        if (xml.isStartElement() && xml.name()==QString("Name"))
          box->addItem(xml.readElementText());
      }
      box->show();
    }
    reply->deleteLater();
    deleteLater();
  }
public:
  void download()
  {
    QUrl url("https://www.cbr.ru/scripts/XML_daily.asp?date_req=14/08/2022");
    QNetworkRequest request;
    request.setUrl(url);
    connect(this, &QNetworkAccessManager::finished, this, &Manager::replyFinished);
    get(request);
  }
  static QByteArray toUtf8(const unsigned char* src)
  {
    if (*src < 0x80)
      return QByteArray((char*)src, 1);
    switch (*src) {
      case 0x80:
       return QByteArray("\xD0\x82",2);
      case 0x81:
       return QByteArray("\xD0\x83",2);
      case 0x82:
       return QByteArray("\xE2\x80\x9A",3);
      case 0x83:
       return QByteArray("\xD1\x93",2);
      case 0x84:
       return QByteArray("\xE2\x80\x9E",3);
      case 0x85:
       return QByteArray("\xE2\x80\xA6",3);
      case 0x86:
       return QByteArray("\xE2\x80\xA0",3);
      case 0x87:
       return QByteArray("\xE2\x80\xA1",3);
      case 0x88:
       return QByteArray("\xE2\x82\xAC",3);
      case 0x89:
       return QByteArray("\xE2\x80\xB0",3);
      case 0x8A:
       return QByteArray("\xD0\x89",2);
      case 0x8B:
       return QByteArray("\xE2\x80\xB9",3);
      case 0x8C:
       return QByteArray("\xD0\x8A",2);
      case 0x8D:
       return QByteArray("\xD0\x8C",2);
      case 0x8E:
       return QByteArray("\xD0\x8B",2);
      case 0x8F:
       return QByteArray("\xD0\x8F",2);
      case 0x90:
       return QByteArray("\xD1\x92",2);
      case 0x91:
       return QByteArray("\xE2\x80\x98",3);
      case 0x92:
       return QByteArray("\xE2\x80\x99",3);
      case 0x93:
       return QByteArray("\xE2\x80\x9C",3);
      case 0x94:
       return QByteArray("\xE2\x80\x9D",3);
      case 0x95:
       return QByteArray("\xE2\x80\xA2",3);
      case 0x96:
       return QByteArray("\xE2\x80\x93",3);
      case 0x97:
       return QByteArray("\xE2\x80\x94",3);
      case 0x98:
       return QByteArray("\xC2\x98",2);
      case 0x99:
       return QByteArray("\xE2\x84\xA2",3);
      case 0x9A:
       return QByteArray("\xD1\x99",2);
      case 0x9B:
       return QByteArray("\xE2\x80\xBA",3);
      case 0x9C:
       return QByteArray("\xD1\x9A",2);
      case 0x9D:
       return QByteArray("\xD1\x9C",2);
      case 0x9E:
       return QByteArray("\xD1\x9B",2);
      case 0x9F:
       return QByteArray("\xD1\x9F",2);
      case 0xA0:
       return QByteArray("\xC2\xA0",2);
      case 0xA1:
       return QByteArray("\xD0\x8E",2);
      case 0xA2:
       return QByteArray("\xD1\x9E",2);
      case 0xA3:
       return QByteArray("\xD0\x88",2);
      case 0xA4:
       return QByteArray("\xC2\xA4",2);
      case 0xA5:
       return QByteArray("\xD2\x90",2);
      case 0xA6:
       return QByteArray("\xC2\xA6",2);
      case 0xA7:
       return QByteArray("\xC2\xA7",2);
      case 0xA8:
       return QByteArray("\xD0\x81",2);
      case 0xA9:
       return QByteArray("\xC2\xA9",2);
      case 0xAA:
       return QByteArray("\xD0\x84",2);
      case 0xAB:
       return QByteArray("\xC2\xAB",2);
      case 0xAC:
       return QByteArray("\xC2\xAC",2);
      case 0xAD:
       return QByteArray("\xC2\xAD",2);
      case 0xAE:
       return QByteArray("\xC2\xAE",2);
      case 0xAF:
       return QByteArray("\xD0\x87",2);
      case 0xB0:
       return QByteArray("\xC2\xB0",2);
      case 0xB1:
       return QByteArray("\xC2\xB1",2);
      case 0xB2:
       return QByteArray("\xD0\x86",2);
      case 0xB3:
       return QByteArray("\xD1\x96",2);
      case 0xB4:
       return QByteArray("\xD2\x91",2);
      case 0xB5:
       return QByteArray("\xC2\xB5",2);
      case 0xB6:
       return QByteArray("\xC2\xB6",2);
      case 0xB7:
       return QByteArray("\xC2\xB7",2);
      case 0xB8:
       return QByteArray("\xD1\x91",2);
      case 0xB9:
       return QByteArray("\xE2\x84\x96",3);
      case 0xBA:
       return QByteArray("\xD1\x94",2);
      case 0xBB:
       return QByteArray("\xC2\xBB",2);
      case 0xBC:
       return QByteArray("\xD1\x98",2);
      case 0xBD:
       return QByteArray("\xD0\x85",2);
      case 0xBE:
       return QByteArray("\xD1\x95",2);
      case 0xBF:
       return QByteArray("\xD1\x97",2);
      case 0xC0:
       return QByteArray("\xD0\x90",2);
      case 0xC1:
       return QByteArray("\xD0\x91",2);
      case 0xC2:
       return QByteArray("\xD0\x92",2);
      case 0xC3:
       return QByteArray("\xD0\x93",2);
      case 0xC4:
       return QByteArray("\xD0\x94",2);
      case 0xC5:
       return QByteArray("\xD0\x95",2);
      case 0xC6:
       return QByteArray("\xD0\x96",2);
      case 0xC7:
       return QByteArray("\xD0\x97",2);
      case 0xC8:
       return QByteArray("\xD0\x98",2);
      case 0xC9:
       return QByteArray("\xD0\x99",2);
      case 0xCA:
       return QByteArray("\xD0\x9A",2);
      case 0xCB:
       return QByteArray("\xD0\x9B",2);
      case 0xCC:
       return QByteArray("\xD0\x9C",2);
      case 0xCD:
       return QByteArray("\xD0\x9D",2);
      case 0xCE:
       return QByteArray("\xD0\x9E",2);
      case 0xCF:
       return QByteArray("\xD0\x9F",2);
      case 0xD0:
       return QByteArray("\xD0\xA0",2);
      case 0xD1:
       return QByteArray("\xD0\xA1",2);
      case 0xD2:
       return QByteArray("\xD0\xA2",2);
      case 0xD3:
       return QByteArray("\xD0\xA3",2);
      case 0xD4:
       return QByteArray("\xD0\xA4",2);
      case 0xD5:
       return QByteArray("\xD0\xA5",2);
      case 0xD6:
       return QByteArray("\xD0\xA6",2);
      case 0xD7:
       return QByteArray("\xD0\xA7",2);
      case 0xD8:
       return QByteArray("\xD0\xA8",2);
      case 0xD9:
       return QByteArray("\xD0\xA9",2);
      case 0xDA:
       return QByteArray("\xD0\xAA",2);
      case 0xDB:
       return QByteArray("\xD0\xAB",2);
      case 0xDC:
       return QByteArray("\xD0\xAC",2);
      case 0xDD:
       return QByteArray("\xD0\xAD",2);
      case 0xDE:
       return QByteArray("\xD0\xAE",2);
      case 0xDF:
       return QByteArray("\xD0\xAF",2);
      case 0xE0:
       return QByteArray("\xD0\xB0",2);
      case 0xE1:
       return QByteArray("\xD0\xB1",2);
      case 0xE2:
       return QByteArray("\xD0\xB2",2);
      case 0xE3:
       return QByteArray("\xD0\xB3",2);
      case 0xE4:
       return QByteArray("\xD0\xB4",2);
      case 0xE5:
       return QByteArray("\xD0\xB5",2);
      case 0xE6:
       return QByteArray("\xD0\xB6",2);
      case 0xE7:
       return QByteArray("\xD0\xB7",2);
      case 0xE8:
       return QByteArray("\xD0\xB8",2);
      case 0xE9:
       return QByteArray("\xD0\xB9",2);
      case 0xEA:
       return QByteArray("\xD0\xBA",2);
      case 0xEB:
       return QByteArray("\xD0\xBB",2);
      case 0xEC:
       return QByteArray("\xD0\xBC",2);
      case 0xED:
       return QByteArray("\xD0\xBD",2);
      case 0xEE:
       return QByteArray("\xD0\xBE",2);
      case 0xEF:
       return QByteArray("\xD0\xBF",2);
      case 0xF0:
       return QByteArray("\xD1\x80",2);
      case 0xF1:
       return QByteArray("\xD1\x81",2);
      case 0xF2:
       return QByteArray("\xD1\x82",2);
      case 0xF3:
       return QByteArray("\xD1\x83",2);
      case 0xF4:
       return QByteArray("\xD1\x84",2);
      case 0xF5:
       return QByteArray("\xD1\x85",2);
      case 0xF6:
       return QByteArray("\xD1\x86",2);
      case 0xF7:
       return QByteArray("\xD1\x87",2);
      case 0xF8:
       return QByteArray("\xD1\x88",2);
      case 0xF9:
       return QByteArray("\xD1\x89",2);
      case 0xFA:
       return QByteArray("\xD1\x8A",2);
      case 0xFB:
       return QByteArray("\xD1\x8B",2);
      case 0xFC:
       return QByteArray("\xD1\x8C",2);
      case 0xFD:
       return QByteArray("\xD1\x8D",2);
      case 0xFE:
       return QByteArray("\xD1\x8E",2);
      case 0xFF:
       return QByteArray("\xD1\x8F",2);
    }
    return QByteArray();
  }
  static QByteArray toUtf8(const QByteArray& src)
  {
    QByteArray result;
    const unsigned char* s = (const unsigned char*)src.constData();
    for (int i=0; i<src.length(); ++i)
      result.append(toUtf8(s+i));
    result.replace(QByteArray("windows-1251"), QByteArray("UTF-8"));
    return result;
  }
};
 
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QPushButton* button = new QPushButton("download xml");
  button->connect(button, &QPushButton::clicked, [button](){
    Manager* manager = new Manager;
    manager->download();
    manager->connect(manager, &QNetworkAccessManager::finished, button, [button](){
      button->setEnabled(true);
    });
  });
  button->connect(button, &QPushButton::clicked, button, [button](){
    button->setEnabled(false);
  });
  button->show();
  return app.exec();
}
Главное, чтобы не встретилась валюта с именем windows
1
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25
16.08.2022, 19:34  [ТС]
Все равно та же ошибка : "Encoding windows-1251 is unsupported" . Эхх..

Добавлено через 6 минут
Нужно видимо и внутри самого файла изменить в той строке. Не знаете как это сделать? Потому что я тут застрял, дальше ничего не смогу сделать

Добавлено через 4 минуты
Даже попробовал вас кусочек кода с ComboBoxom вставить. И ComboBox пустой, из-за ошибки кодировки ничего не считывается
0
 Аватар для kapbepucm
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
16.08.2022, 19:58
Цитата Сообщение от Данил2003 Посмотреть сообщение
Все равно та же ошибка : "Encoding windows-1251 is unsupported" . Эхх..
это мой код последний такое даёт?

Добавлено через 57 секунд
Цитата Сообщение от Данил2003 Посмотреть сообщение
Нужно видимо и внутри самого файла изменить в той строке. Не знаете как это сделать?
там это сделано

Добавлено через 18 минут
То, что приложено в этом посте, какбы это сказать... хоть и utf8, но получить такое можно, если интерпретировать строку utf8 как win-1251 и сохранить потом опять в utf8
0
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25
16.08.2022, 20:29  [ТС]
Да, в последнем коде все равно не получается ничего считать и ошибка "Encoding windows-1251 is unsupported"

Добавлено через 2 минуты
Я добавляю проверку if (xml.hasError()) {
qDebug() « "Error:" « xml.errorString();
}
А без проверки просто данные не считываются по причине этой ошибки кодировки

Добавлено через 5 минут
Ой, всееееее. Я пересобрал и все работает!!Огромнейшее вам спасибо.
0
 Аватар для kapbepucm
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
16.08.2022, 20:31
Цитата Сообщение от Данил2003 Посмотреть сообщение
Да, в последнем коде все равно не получается ничего считать и ошибка
Неполучается воспроизвести такое поведение

А файл, который даст такой код- не подходит?
C++ (Qt)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
#include <QApplication>
#include <QPushButton>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QFile>
 
class Manager: public QNetworkAccessManager
{
  void replyFinished(QNetworkReply* reply)
  {
    if (!reply->error()) {
      QFile file("file.xml");
      if (file.open(QFile::WriteOnly)) {
        file.write(toUtf8(reply->readAll()));
        file.close();
      }
    }
    reply->deleteLater();
    deleteLater();
  }
public:
  void download()
  {
    QUrl url("https://www.cbr.ru/scripts/XML_daily.asp?date_req=14/08/2022");
    QNetworkRequest request;
    request.setUrl(url);
    connect(this, &QNetworkAccessManager::finished, this, &Manager::replyFinished);
    get(request);
  }
  static QByteArray toUtf8(const unsigned char* src)
  {
    if (*src < 0x80)
      return QByteArray((char*)src, 1);
    switch (*src) {
      case 0x80:
       return QByteArray("\xD0\x82",2);
      case 0x81:
       return QByteArray("\xD0\x83",2);
      case 0x82:
       return QByteArray("\xE2\x80\x9A",3);
      case 0x83:
       return QByteArray("\xD1\x93",2);
      case 0x84:
       return QByteArray("\xE2\x80\x9E",3);
      case 0x85:
       return QByteArray("\xE2\x80\xA6",3);
      case 0x86:
       return QByteArray("\xE2\x80\xA0",3);
      case 0x87:
       return QByteArray("\xE2\x80\xA1",3);
      case 0x88:
       return QByteArray("\xE2\x82\xAC",3);
      case 0x89:
       return QByteArray("\xE2\x80\xB0",3);
      case 0x8A:
       return QByteArray("\xD0\x89",2);
      case 0x8B:
       return QByteArray("\xE2\x80\xB9",3);
      case 0x8C:
       return QByteArray("\xD0\x8A",2);
      case 0x8D:
       return QByteArray("\xD0\x8C",2);
      case 0x8E:
       return QByteArray("\xD0\x8B",2);
      case 0x8F:
       return QByteArray("\xD0\x8F",2);
      case 0x90:
       return QByteArray("\xD1\x92",2);
      case 0x91:
       return QByteArray("\xE2\x80\x98",3);
      case 0x92:
       return QByteArray("\xE2\x80\x99",3);
      case 0x93:
       return QByteArray("\xE2\x80\x9C",3);
      case 0x94:
       return QByteArray("\xE2\x80\x9D",3);
      case 0x95:
       return QByteArray("\xE2\x80\xA2",3);
      case 0x96:
       return QByteArray("\xE2\x80\x93",3);
      case 0x97:
       return QByteArray("\xE2\x80\x94",3);
      case 0x98:
       return QByteArray("\xC2\x98",2);
      case 0x99:
       return QByteArray("\xE2\x84\xA2",3);
      case 0x9A:
       return QByteArray("\xD1\x99",2);
      case 0x9B:
       return QByteArray("\xE2\x80\xBA",3);
      case 0x9C:
       return QByteArray("\xD1\x9A",2);
      case 0x9D:
       return QByteArray("\xD1\x9C",2);
      case 0x9E:
       return QByteArray("\xD1\x9B",2);
      case 0x9F:
       return QByteArray("\xD1\x9F",2);
      case 0xA0:
       return QByteArray("\xC2\xA0",2);
      case 0xA1:
       return QByteArray("\xD0\x8E",2);
      case 0xA2:
       return QByteArray("\xD1\x9E",2);
      case 0xA3:
       return QByteArray("\xD0\x88",2);
      case 0xA4:
       return QByteArray("\xC2\xA4",2);
      case 0xA5:
       return QByteArray("\xD2\x90",2);
      case 0xA6:
       return QByteArray("\xC2\xA6",2);
      case 0xA7:
       return QByteArray("\xC2\xA7",2);
      case 0xA8:
       return QByteArray("\xD0\x81",2);
      case 0xA9:
       return QByteArray("\xC2\xA9",2);
      case 0xAA:
       return QByteArray("\xD0\x84",2);
      case 0xAB:
       return QByteArray("\xC2\xAB",2);
      case 0xAC:
       return QByteArray("\xC2\xAC",2);
      case 0xAD:
       return QByteArray("\xC2\xAD",2);
      case 0xAE:
       return QByteArray("\xC2\xAE",2);
      case 0xAF:
       return QByteArray("\xD0\x87",2);
      case 0xB0:
       return QByteArray("\xC2\xB0",2);
      case 0xB1:
       return QByteArray("\xC2\xB1",2);
      case 0xB2:
       return QByteArray("\xD0\x86",2);
      case 0xB3:
       return QByteArray("\xD1\x96",2);
      case 0xB4:
       return QByteArray("\xD2\x91",2);
      case 0xB5:
       return QByteArray("\xC2\xB5",2);
      case 0xB6:
       return QByteArray("\xC2\xB6",2);
      case 0xB7:
       return QByteArray("\xC2\xB7",2);
      case 0xB8:
       return QByteArray("\xD1\x91",2);
      case 0xB9:
       return QByteArray("\xE2\x84\x96",3);
      case 0xBA:
       return QByteArray("\xD1\x94",2);
      case 0xBB:
       return QByteArray("\xC2\xBB",2);
      case 0xBC:
       return QByteArray("\xD1\x98",2);
      case 0xBD:
       return QByteArray("\xD0\x85",2);
      case 0xBE:
       return QByteArray("\xD1\x95",2);
      case 0xBF:
       return QByteArray("\xD1\x97",2);
      case 0xC0:
       return QByteArray("\xD0\x90",2);
      case 0xC1:
       return QByteArray("\xD0\x91",2);
      case 0xC2:
       return QByteArray("\xD0\x92",2);
      case 0xC3:
       return QByteArray("\xD0\x93",2);
      case 0xC4:
       return QByteArray("\xD0\x94",2);
      case 0xC5:
       return QByteArray("\xD0\x95",2);
      case 0xC6:
       return QByteArray("\xD0\x96",2);
      case 0xC7:
       return QByteArray("\xD0\x97",2);
      case 0xC8:
       return QByteArray("\xD0\x98",2);
      case 0xC9:
       return QByteArray("\xD0\x99",2);
      case 0xCA:
       return QByteArray("\xD0\x9A",2);
      case 0xCB:
       return QByteArray("\xD0\x9B",2);
      case 0xCC:
       return QByteArray("\xD0\x9C",2);
      case 0xCD:
       return QByteArray("\xD0\x9D",2);
      case 0xCE:
       return QByteArray("\xD0\x9E",2);
      case 0xCF:
       return QByteArray("\xD0\x9F",2);
      case 0xD0:
       return QByteArray("\xD0\xA0",2);
      case 0xD1:
       return QByteArray("\xD0\xA1",2);
      case 0xD2:
       return QByteArray("\xD0\xA2",2);
      case 0xD3:
       return QByteArray("\xD0\xA3",2);
      case 0xD4:
       return QByteArray("\xD0\xA4",2);
      case 0xD5:
       return QByteArray("\xD0\xA5",2);
      case 0xD6:
       return QByteArray("\xD0\xA6",2);
      case 0xD7:
       return QByteArray("\xD0\xA7",2);
      case 0xD8:
       return QByteArray("\xD0\xA8",2);
      case 0xD9:
       return QByteArray("\xD0\xA9",2);
      case 0xDA:
       return QByteArray("\xD0\xAA",2);
      case 0xDB:
       return QByteArray("\xD0\xAB",2);
      case 0xDC:
       return QByteArray("\xD0\xAC",2);
      case 0xDD:
       return QByteArray("\xD0\xAD",2);
      case 0xDE:
       return QByteArray("\xD0\xAE",2);
      case 0xDF:
       return QByteArray("\xD0\xAF",2);
      case 0xE0:
       return QByteArray("\xD0\xB0",2);
      case 0xE1:
       return QByteArray("\xD0\xB1",2);
      case 0xE2:
       return QByteArray("\xD0\xB2",2);
      case 0xE3:
       return QByteArray("\xD0\xB3",2);
      case 0xE4:
       return QByteArray("\xD0\xB4",2);
      case 0xE5:
       return QByteArray("\xD0\xB5",2);
      case 0xE6:
       return QByteArray("\xD0\xB6",2);
      case 0xE7:
       return QByteArray("\xD0\xB7",2);
      case 0xE8:
       return QByteArray("\xD0\xB8",2);
      case 0xE9:
       return QByteArray("\xD0\xB9",2);
      case 0xEA:
       return QByteArray("\xD0\xBA",2);
      case 0xEB:
       return QByteArray("\xD0\xBB",2);
      case 0xEC:
       return QByteArray("\xD0\xBC",2);
      case 0xED:
       return QByteArray("\xD0\xBD",2);
      case 0xEE:
       return QByteArray("\xD0\xBE",2);
      case 0xEF:
       return QByteArray("\xD0\xBF",2);
      case 0xF0:
       return QByteArray("\xD1\x80",2);
      case 0xF1:
       return QByteArray("\xD1\x81",2);
      case 0xF2:
       return QByteArray("\xD1\x82",2);
      case 0xF3:
       return QByteArray("\xD1\x83",2);
      case 0xF4:
       return QByteArray("\xD1\x84",2);
      case 0xF5:
       return QByteArray("\xD1\x85",2);
      case 0xF6:
       return QByteArray("\xD1\x86",2);
      case 0xF7:
       return QByteArray("\xD1\x87",2);
      case 0xF8:
       return QByteArray("\xD1\x88",2);
      case 0xF9:
       return QByteArray("\xD1\x89",2);
      case 0xFA:
       return QByteArray("\xD1\x8A",2);
      case 0xFB:
       return QByteArray("\xD1\x8B",2);
      case 0xFC:
       return QByteArray("\xD1\x8C",2);
      case 0xFD:
       return QByteArray("\xD1\x8D",2);
      case 0xFE:
       return QByteArray("\xD1\x8E",2);
      case 0xFF:
       return QByteArray("\xD1\x8F",2);
    }
    return QByteArray();
  }
  static QByteArray toUtf8(const QByteArray& src)
  {
    QByteArray result;
    const unsigned char* s = (const unsigned char*)src.constData();
    for (int i=0; i<src.length(); ++i)
      result.append(toUtf8(s+i));
    result.replace(QByteArray("windows-1251"), QByteArray("UTF-8"));
    return result;
  }
};
 
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QPushButton* button = new QPushButton("download xml");
  button->connect(button, &QPushButton::clicked, [button](){
    Manager* manager = new Manager;
    manager->download();
    manager->connect(manager, &QNetworkAccessManager::finished, button, [button](){
      button->setEnabled(true);
    });
  });
  button->connect(button, &QPushButton::clicked, button, [button](){
    button->setEnabled(false);
  });
  button->show();
  return app.exec();
}
0
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25
16.08.2022, 20:37  [ТС]
Уже все работает, спасибо большое! Тот последний код с result.replace(QByteArray("windows-1251"), QByteArray("UTF-8"));
А можете объяснить почему вы так сделали?
0
 Аватар для kapbepucm
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
16.08.2022, 20:45
Цитата Сообщение от Данил2003 Посмотреть сообщение
А можете объяснить почему вы так сделали?
Я игрался с QXmlStreamReader, он в приоритете смотрит на злополучное вхождение <?xml version="1.0" encoding="***"?>, причём неважно в какой кодировке подаваемые данные.
0
0 / 0 / 0
Регистрация: 29.10.2018
Сообщений: 25
16.08.2022, 20:56  [ТС]
А, понял. Еще раз спасибо, очень выручили
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2022, 20:56

Проблемы при открытии файла
Значит программа работает но при запуски идут только одни нули(Может быть я неправильно подключел текстовый документ? int main() { ...

Проблемы с кодировкой(а может и не с ней) при запуске файла в IDE Geany
Доброго времени суток. При запуске файла в Geany там, где должен быть текст на русском языке, выводятся символы, а не, собственно, текст. ...

Сортировка при открытии xml файла
Здравствуйте , подскажите пожалуйста, моя программа открывает xml файл который содержит имя и числовое значение, мне нужно отсортировать по...

Проблемы с кодировкой xml
Добрый день Пишу класс для работы с yandex market. Формат данных для импорта в YM, как известно, YML Столкнулся со странной...

При изменении target framework c 2.0 на 4.0 ошибка преобразования xml файла БД
Уважаемые Гуру! Попробовал изменить в рабочем проекте target framework c 2.0 на 4.0 - получаю сообщение об ошибке - Как можно...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru