Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Проюлемы с кодировкой и записью в файл...

Автор: terrible 17.1.2008, 16:46

Пытаюсь делать это так:

    QFile fileWrite( "d:\\temp.tmp");
    if( !fileWrite.open( QIODevice::WriteOnly))
    {
        qCritical( "Can'not open file: %s for read", "d:\\temp.tmp");
        return -1;
    }
    
    QString arr[] = { "тест 1",  "тест 2", "тест 2"};

    QTextCodec *pCodec = QTextCodec::codecForName( "windows-1251");
    QTextCodec::setCodecForCStrings( pCodec);

    QTextStream in( &fileWrite);
    in.setCodec( pCodec);
    for( int n = 0; n < 3; n++)
        in << arr[n] << " ";
    fileWrite.close();
Но в файл записывется обракадабра. :(
Причем если строку:
QString arr[] = { "тест 1",  "тест 2", "тест 2"};
перенести за setCodecForCStrings, то все нормально, почему?

Я не могу переносить потому, что у меня массив глобальный, и он инициализирется раньше вызова функции main.

Как это обойти?

Автор: archimed7592 17.1.2008, 16:56

Цитата(terrible @ 17.1.2008, 16:46) *
перенести за setCodecForCStrings, то все нормально, почему?

Потому что инициализация строк происходит с другим кодэком(т.е. до того, как ты выставил кодэк).

Автор: terrible 17.1.2008, 16:59

Цитата(archimed7592 @ 17.1.2008, 16:56) *
Потому что инициализация строк происходит с другим кодэком(т.е. до того, как ты выставил кодэк).
И как быть?

Автор: archimed7592 17.1.2008, 17:00

Как вариант:

CODE

struct CodecHelper
{
CodecHelper()
{ QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "windows-1251") ); }
};

QString *initArr()
{
static CodecHelper ch;
static QString arr[] = { "тест 1", "тест 2", "тест 2"};
return arr;
}

QString *arr = initArr();


int main()
{
// ...
}
Но я не уверен, что можно устанавливать кодэк до создания экземпляра QApplication - проверь, работает ли.

Автор: terrible 17.1.2008, 17:10

Интересное решение, спасибо, работает. :)

p.s. может добавите в "технику программирования", авось кому пригодится!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)