LINUX.ORG.RU

QString cp1251-utf8-koi8-r


0

0

Собственно в доке прочитал:

QTextCodec *codec = QTextCodec::codecForName("CP1251");

QString QStrUtf = codec.toUnicode( (const char*)text_to_code );//text_to_code читается из файла в кодировке cp1251

А дальше в QStrUtf оказывается не перекодированная строка. Кто-нибуть перекодировал с помощью QString? Если можно дайте рабочий пример.

Пожалуйста.

anonymous

//
//      recode.h
//
//
//
#ifndef __recode_h__
#define __recode_h__

#include <qstring.h>
#include <iconv.h>
#include <string.h>

//
//      Recodes string "sWhatToRecode" from codepage "sFrom" to codepage "To"
//
//      Returns recoded string
QString recode ( QCString sFrom, QCString sTo, const char * psWhatToRecode );

#endif // __recode_h__

//
//      recode.cpp
//
//
#include "recode.h"

QString recode ( QCString sFrom, QCString sTo, const char * psWhatToRecode )
{
        QString sResult;
        if ( ( psWhatToRecode == NULL ) || ( *psWhatToRecode == 0 ) )
                return sResult;
        iconv_t cd;
        cd = iconv_open ( sTo, sFrom );
        if ( cd == (iconv_t) -1 )
                return sResult;
        size_t insize, outsize;
        int iRes;
        int nLength = strlen ( psWhatToRecode );
        insize = nLength;
        void * psResult = new char [nLength+1];
        outsize = nLength;
        char * psBuffer = (char *) psResult;
        char * pStr = (char *) psWhatToRecode;

        iRes = iconv ( cd, &pStr, &insize, &psBuffer, &outsize );
        if ( ( iRes < 0 ) || ( insize != 0 ) )
        {
                delete [] psResult;
                iconv_close ( cd );
                return sResult;
        }

        psBuffer = (char *) psResult;
        psBuffer[nLength - outsize] = 0;
        sResult = QString::fromLocal8Bit(  (const char *)psResult );
        delete [] psResult;
        iconv_close ( cd );
        return sResult;
}


////  кусок рабочей программы: перекодируются поля таблицы из кои8 в ср1251
////  в ячейках - русские буквы.

..............

int numCols = DataSourceTable->numCols();
int numRows = DataSourceTable->numRows();
for ( int i = 0; i < numRows; i++ )
  for ( int j = 0; j < numRows; j++ )
     if ( DataSourceTable->isSelected ( i, j ) )
         DataSourceTable->setText ( i, j, recode ( "koi8-r", "cp1251", DataSourceTable->text ( i, j ).local8Bit() ) );
...................

RomanU
()
Ответ на: комментарий от anonymous

попробуй такой код

QString cConvert::convert(char *str, char *from, char *to)
{
QTextCodec* codec = QTextCodec::codecForName(from);
if (!codec) return NULL;
QString unicodeString = codec->toUnicode( str);

if (strcmp(from,to))
{
codec = QTextCodec::codecForName(to);
if (!codec) return NULL;

return codec->fromUnicode(unicodeString);
}

return unicodeString;
}

//пример
QString str1 = newconv->convert("абвгде", "KOI8-R", "CP1251")

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.