Russian Qt Forum
Ноябрь 22, 2024, 20:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ломается кодировка в dll  (Прочитано 9013 раз)
antoshib
Гость
« : Октябрь 09, 2014, 15:45 »

Проблема в передаче кириллических строк из приложения (собрано в Delphi в кодировке CP1251)
в DLL-библиотеку (собрана в QT с кодировкой CP1251).

Принятую в длл строчку вывожу в лог-файл и вижу вместо кириллицы вопросики "НепонимающийНепонимающий?".

Строчки кириллицы, созданные внутри самой длл, выводятся в лог корректно.

Проверил посимвольно принятую строчку - там правильные коды кириллических символов (а - 1072, б - 1073..).

Но почему-то в файл выводит вопросики.. помогите разобраться плиз.

Код:
// void* Request->Data;
// int     Request->DataSize;

QString ostr;
QString stringForLog = QString("\nSTR=%1\n").arg( ostr.setRawData((QChar*) Request->Data, Request->DataSize) );

logString( stringForLog );


PS:
Прошу прощения, тему можно закрыть, помогло:

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

« Последнее редактирование: Октябрь 09, 2014, 16:27 от antoshib » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 09, 2014, 17:23 »

Проверьте кодировку файла Улыбающийся
Записан

kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #2 : Октябрь 09, 2014, 17:33 »

PS:
Прошу прощения, тему можно закрыть, помогло:

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

В принципе сгодится, если есть уверенность что не понадобится переход на Qt5.
Универсальнее будет так:
Код:
    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QString stringForLog = codec->toUnicode((char *) Request->Data);
Записан
antoshib
Гость
« Ответ #3 : Октябрь 09, 2014, 17:43 »

 Улыбающийся Спасибо! приму на заметку
Записан
antoshib
Гость
« Ответ #4 : Октябрь 17, 2014, 16:17 »

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

вот этот код работает криво (но хочется чтоб работал прямо)) :

Код:
QString  fileName;
//...
QFile     file( fileName );
QStringList fStrings;

file.open(QIODevice::ReadOnly | QIODevice::Text);
fStrings = QTextStream(&file).readAll().split("\n");
file.close();
//...
QString uLine;
size_t r;

foreach( QString fLine, fStrings )
        if ( r = fLine.size() ){
            uLine = (fLine+"\n");

            soap_send_raw( soap, uLine.toUtf8().constData(), r+1 );   // в этом месте пропадает кусок строки, если в ней есть кириллица (utf-8)
        }
//...


а этот код работает правильно:

Код:
QString  fileName;
FILE *fd = fopen( fileName.toStdString().c_str(), "rb");

size_t r;

while(1){
      r = fread(soap->tmpbuf, 1, sizeof(soap->tmpbuf), fd);
      if (!r)
         break;

      if (soap_send_raw(soap, soap->tmpbuf, r))  // тут кириллица отправляется хорошо
         break;
}
fclose(fd);
Записан
antoshib
Гость
« Ответ #5 : Октябрь 21, 2014, 12:24 »

стало немного лучше, но передается utf-16, вместо ожидаемого utf-8  В замешательстве
Код:
           soap_send_raw( soap, (char*) uLine.toStdWString().c_str(), 2*(r+1) );
Записан
antoshib
Гость
« Ответ #6 : Октябрь 24, 2014, 12:15 »

ну знатокиии... где вы  Непонимающий
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Ноябрь 06, 2014, 12:26 »

QFile::read
Записан
antoshib
Гость
« Ответ #8 : Ноябрь 07, 2014, 14:48 »

QFile::read

Спасибо, заработало!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.