crossplatform.ru

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


  Ответ в Проюлемы с кодировкой и записью в файл...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
terrible Дата 17.1.2008, 17:10
  Интересное решение, спасибо, работает. :)

p.s. может добавите в "технику программирования", авось кому пригодится!
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, 16:59
 
Цитата(archimed7592 @ 17.1.2008, 16:56) *
Потому что инициализация строк происходит с другим кодэком(т.е. до того, как ты выставил кодэк).
И как быть?
archimed7592 Дата 17.1.2008, 16:56
 
Цитата(terrible @ 17.1.2008, 16:46) *
перенести за setCodecForCStrings, то все нормально, почему?

Потому что инициализация строк происходит с другим кодэком(т.е. до того, как ты выставил кодэк).
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.

Как это обойти?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 2:11