Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: ffldove от Ноябрь 23, 2009, 11:43



Название: Преобразование кодировки DOS в windows-1251
Отправлено: ffldove от Ноябрь 23, 2009, 11:43
Есть прграмма
Код:
#include <QtCore/qtextstream.h>
#include <QtCore/qstring.h>
#include <QtCore/qlist.h>
#include <QtCore/qtextcodec.h>
#include <QFile>

int main ()
{
QFile read_file ("read_file.000");
QFile write_file ("write_file.000");
write_file.open(QIODevice::WriteOnly);
read_file.open(QIODevice::ReadOnly);
QTextStream read_stream(&read_file);
QTextStream write_stream(&write_file);
QString str;
while (!read_stream.atEnd()) {
str=read_stream.readLine();
//вставить код перекодировки строки
write_stream<<str+"\n";
}
read_file.close();
write_file.close();
}

Требуется преобразовать строку из кодировки dos (cp866) (исходный файл в этой кодировке) в windows-1251 (cp1251) (на выходе требуется эта кодировка).
Пробовал типа
Код:
	QTextCodec *codec = QTextCodec::codecForName("CP866");
QString str2 = codec->toUnicode(str);
но здесь в unicode, да и к тому же не работает.
Как можно это сделать?


Название: Re: Преобразование кодировки DOS в windows-1251
Отправлено: Zmeishe от Ноябрь 23, 2009, 12:33
У класса QTextStream есть функция setCodec()

Попробуй
read_stream.setCodec( QTextCodec::codecForName("CP866") );
write_stream.setCodec( QTextCodec::codecForName("CP1251") );


Название: Re: Преобразование кодировки DOS в windows-1251
Отправлено: ffldove от Ноябрь 23, 2009, 13:28
У класса QTextStream есть функция setCodec()

Попробуй
read_stream.setCodec( QTextCodec::codecForName("CP866") );
write_stream.setCodec( QTextCodec::codecForName("CP1251") );

Спасибо.
Тогда еще вопросик вроде как в QTextStream есть функции по автоматическому форматированию текста, нет там случаем функции которая убирает все пробелы в начале и конце строки символов?
Пробовал
Код:
new_str=str.strsimplifyWhiteSpace()
выдает ошибку
 error: 'class QString' has no member named 'simplifyWhiteSpace'


Название: Re: Преобразование кодировки DOS в windows-1251
Отправлено: Zmeishe от Ноябрь 23, 2009, 15:38
QString QString::simplified () const

Returns a string that has whitespace removed from the start and the end, and that has each sequence of internal whitespace replaced with a single space.

Whitespace means any character for which QChar::isSpace() returns true. This includes the ASCII characters '\t', '\n', '\v', '\f', '\r', and ' '.

Example:

     QString str = "  lots\t of\nwhitespace\r\n ";
     str = str.simplified();
     // str == "lots of whitespace";


Название: Re: Преобразование кодировки DOS в windows-1251
Отправлено: ffldove от Ноябрь 23, 2009, 15:46
Отлично, Спасибо.