crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Проюлемы с кодировкой и записью в файл...
terrible
  опции профиля:
сообщение 17.1.2008, 16:46
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 16.10.2007
Пользователь №: 13

Спасибо сказали: 1 раз(а)




Репутация:   0  


Пытаюсь делать это так:
    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.

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

Сообщение отредактировал terrible - 17.1.2008, 16:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 17.1.2008, 16:56
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Потому что инициализация строк происходит с другим кодэком(т.е. до того, как ты выставил кодэк).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
terrible
  опции профиля:
сообщение 17.1.2008, 16:59
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 16.10.2007
Пользователь №: 13

Спасибо сказали: 1 раз(а)




Репутация:   0  


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


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как вариант:
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
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 16.10.2007
Пользователь №: 13

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

p.s. может добавите в "технику программирования", авось кому пригодится!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2021, 3:22