Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Примерный ученик от Апрель 18, 2009, 19:58



Название: Проблема кодировкой DOS кирилица -> windows
Отправлено: Примерный ученик от Апрель 18, 2009, 19:58
Делаю
Код:
		QFile file(s);
if ( file.open( IO_ReadOnly ) )
{
           QTextStream stream( &file );
while ( !stream.atEnd() )
{
QString line = stream.readLine();
        QTextCodec *codec = QTextCodec::codecForName("IBM 866");
        QCString locallyEncoded = codec->fromUnicode( line );
    QMessageBox::information( this,"",locallyEncoded);
}
          file.close();
}
Получаю КРЯКОЗЯБРЫ.

Файл текстовый, создан в FAR в DOS-кодировке.

QT3.3.8 windowsXP


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Rcus от Апрель 18, 2009, 20:07
/*sigh*/
Цитировать
void QTextStream::setCodec ( QTextCodec * codec )
Sets the codec for this stream to codec. Will not try to autodetect Unicode.

Note that this function should be called before any data is read to/written from the stream.


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Примерный ученик от Апрель 18, 2009, 20:15
А если по-русски?


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Rcus от Апрель 18, 2009, 20:19
А если по-русски то вы написали бессмысленный код.
Кодек нужно устанавливать на текстовый поток.


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Примерный ученик от Апрель 18, 2009, 20:24
А у меня какой?


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: pastor от Апрель 18, 2009, 20:31
А у меня какой?

Код
C++ (Qt)
QTextStream::setCodec ( QTextCodec * codec )


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Rcus от Апрель 18, 2009, 20:35
Ну посмотрите:
CString(ibm866) -> [win1251 codec] -> QString(utf16 already corrupted) -> [ibm 866] -> QCString -> [cstring codec] -> QString

В общем этот кусок кода должен выглядеть примерно так:
Код
C++ (Qt)
QFile file(s);
if ( file.open( IO_ReadOnly ) ) {
   QTextStream stream( &file );
   stream.setCodec(QTextCodec::codeForName("IBM866"));
   while ( !stream.atEnd() ) {
       const QString line = stream.readLine();
       QMessageBox::information( this,"",locallyEncoded);
   }
   file.close();
}


Название: Re: Проблема кодировкой DOS кирилица -> windows
Отправлено: Примерный ученик от Апрель 18, 2009, 20:49
Спасибо за помощь!!!
Срослось ;D