Ruslan Polupan
Ruslan Polupan12. November 2019 09:11

QString UTF8 -> WIN1251

QString, UTF8, winndows1251

Доброго времени суток.
Задача: в базу данных Firebird в поле типа BLOB (содержит набор SQL запросов которые по расписанию выполнятся на базе данных) записать строки:

QString strSQL = "UPDATE FUELS SET NAME = 'ДП-З-Евро5-ВО' WHERE FUEL_ID = 7;";

Как сконвертировать strSQL в win1251?
я уже мозг сломал изучая примеры....
Буду благодарен....

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

15
R
  • 12. November 2019 09:17

Добрий день, через QTextCodec

    Алексей Внуков
    • 12. November 2019 09:18
    • (bearbeitet)

    в параметре поля прописать колейт и нужную кодировку. больше конвертировать не нужно

      Ruslan Polupan
      • 12. November 2019 14:19

      Если не затруднит можно пример кода....

        Ruslan Polupan
        • 13. November 2019 01:54

        COLLATE к сожалению я менять не могу.

          IscanderChe
          • 13. November 2019 02:11
          QTextCodec* codec1;
          QTextCodec* codec2;
          
          codec1 = QTextCodec::codecForName("UTF-8");
          codec2 = QTextCodec::codecForLocale();
          
          QString strSQL = "...";
          QByteArray byteArrayContent;
          byteArrayContent.insert(0, strSQL);
          strSQL = codec1->toUnicode(byteArrayContent);
          strSQL = codec2->fromUnicode(strSQL);
          
            Ruslan Polupan
            • 13. November 2019 02:56
                int runScriptCroupID;
                QByteArray result;
                QTextCodec* codecU = QTextCodec::codecForName("UTF-8");
                QTextCodec* codecW = QTextCodec::codecForName("Windows-1251");
                result.insert(0, strSQL);
                strSQL = codecU->toUnicode(result);
                strSQL = codecW->fromUnicode(strSQL);
                QSqlQuery q;
                q.exec("SELECT GEN_ID(GEN_RUNSCRIPTSGROUPS,1) FROM RDB$DATABASE");
                q.next();
                runScriptCroupID = q.value(0).toInt();
                q.finish();
                foreach (int terminalID, m_terminals) {
                    q.prepare("INSERT INTO RUNSCRIPTS (TERMINAL_ID, RUNSCRIPT_ID, RUNSCRIPTSGROUP_ID, CONNECT_ID, RUNDAT, SQLDATA, NEED_RESTART, APPLY, ISERROR, RESTARTMSG, RUNSRIPT_TYPE, DPROCESSED) "
                                   "VALUES (:terminalID, GEN_ID(GEN_RUNSCRIPTS,1), :runScriptGroupID, 2, :scriptDate, :script, 'F', 'F', 'F', '', 0, NULL)");
                    q.bindValue(":terminalID", terminalID);
                    q.bindValue(":runScriptGroupID",runScriptCroupID);
                    q.bindValue(":scriptDate", ui->dateEdit->date().toString("yyyy-MM-dd ")+"23:15:00");
                    q.bindValue(":script" , strSQL);
                    if(!q.exec()) qCritical(logCritical()) << "Не возможно добавить скрипт для АЗС" << terminalID << q.lastError().text();
                }
            

            получем...

            Если так

            QTextCodec* codecW = QTextCodec::codecForLocale();
            

            То получаем следующее:

              IscanderChe
              • 13. November 2019 03:54

              А можно эти кракозябры сюда в виде текста скопировать? Или самостоятельно прогоните их через эту приблуду, посмотрите что из чего кодится.

                Ruslan Polupan
                • 13. November 2019 05:03

                Начнем сначала :-)
                Перекодировку не используем.
                Вот как отвображается BLOB в интерефейсе сторонней программы там ГВОЗДЯМИ 1251.

                вот так отображается текст если я его сюда вставляю из буфера
                ?”?Y-?—-?•??N€??5-?’?z

                А вот так реагирует декодер

                Что-то я совсем заблудился....

                  IscanderChe
                  • 13. November 2019 05:32

                  Судя по скринам, и до кодировки и после кодировки одни и те же значения в BLOBе оказываются для "ДП-3-Евро5-ВО". Как так?

                  Пример, который привёл я, рабочий. В своё время написал перекодировщик файлов из Windows-1251 в UTF-8 и обратно, всё работает успешно. Возможно, что-то особенное на стороне БД.

                    Ruslan Polupan
                    • 13. November 2019 05:51

                    возможно..

                      Алексей Внуков
                      • 13. November 2019 05:58
                      • (bearbeitet)

                      а почему именно в BLOB? он предназначен в для хранения бинарных дынных, может стоит реализацию базы данных пересмотреть?

                        Алексей Внуков
                        • 13. November 2019 05:59

                        я подозреваю что ситуация из-за использования поля не по назначению

                          Ruslan Polupan
                          • 13. November 2019 06:41

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

                            Алексей Внуков
                            • 14. November 2019 04:06

                            повторю: BLOB - это бинарник, хранить обыкновенную строку в BLOB - это не правильно. но даже если уже есть такая ситуация которую правильно сделать нельзя (и не важно что в сторонней проге кодировка гвоздями) - совет только копать в сторону преобразования бинарных данных в строку

                              Ruslan Polupan
                              • 14. November 2019 04:23

                              Я уже понял это, ковыряюсь сижу....

                                Kommentare

                                Nur autorisierte Benutzer können Kommentare posten.
                                Bitte Anmelden oder Registrieren
                                Letzte Kommentare
                                A
                                ALO1ZE19. Oktober 2024 15:19
                                Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                ИМ
                                Игорь Максимов5. Oktober 2024 14:51
                                Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                d
                                dblas55. Juli 2024 18:02
                                QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                k
                                kmssr9. Februar 2024 02:43
                                Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                Jetzt im Forum diskutieren
                                J
                                JacobFib17. Oktober 2024 10:27
                                добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                                JW
                                Jhon Wick1. Oktober 2024 22:52
                                Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                                КГ
                                Кирилл Гусарев27. September 2024 16:09
                                Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                                F
                                Fynjy22. Juli 2024 11:15
                                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                                Folgen Sie uns in sozialen Netzwerken