crossplatform.ru

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

> Кодировки, кодировки...
Rocky
  опции профиля:
сообщение 26.2.2010, 18:57
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Всем привет!

Подскажите плиз с таким моментом. Беру текстовый файл, открываю, прогоняю его через QTextStream с заданной кодировкой, сохраняю... Все ок. Если 2-й раз сделать тоже самое - вместо русских букв кракозябры... Это нормально? ) Просто как-то непонятно... Помогите разобраться плиз )

Т.е. изначально у файла win1251. Прогнал сохранил в utf-8. На этом моменте все ок.. Потом опять его беру и прогоняю в utf-8 - вместо русских комментов - чушь... ( Ощущение что это как-то связано с юникодом...
Вот функция:
void CFileDecoder::DecodeFile(const QString& sSourceFile, const QString& sWantedCodec) 
{
    QFile oSourceFile(sSourceFile);
    if (!oSourceFile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        //...
        return;
    }
    
    QTextStream oInStream(&oSourceFile);
    const QString sCurCodec = oInStream.codec()->name();
    if (!sCurCodec.compare(sWantedCodec, Qt::CaseInsensitive)) return;

    const QString sTargetFile = ...;
    QFile oTargetFile(sTargetFile);
    if (!oTargetFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
    {
        //...
        return;
    }
    
    QTextStream oOutStream(&oTargetFile);
    oOutStream.setCodec(QTextCodec::codecForName(sWantedCodec.toStdString().c_str()));
    oOutStream << oInStream.readAll();


Вот в этом месте я так поинмаю что name() возвращает не кодировку файла, а кодировку которую я выставил для всего приложения (вызовом статической функции)
QTextStream oInStream(&oSourceFile);
const QString sCurCodec = oInStream.codec()->name();

так ведь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 26.2.2010, 19:52
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Сорри, в конце недели туго с речью)

Есть файл in.txt в кодировке win1251. Я его конвертирую в utf-8 и сохраняю в out.txt. Потом in.txt удаляю, out.txt копирую с новым именем (in.txt), потом out.txt удаляю - т.е. как бы меняю имя файла.
    //удаляем sSourceFile
    if (!QFile::remove(sSourceFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorSourceFileNotDeleted].arg(sSourceFile));
        return;
    }

    //копируем sTargetFile в sSourceFile
    if (!QFile::copy(sTargetFile, sSourceFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorSourceFileNotReplaced].arg(sSourceFile));
        return;
    }

    //удаляем sTargetFile
    if (!QFile::remove(sTargetFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorTargetFileNotDeleted].arg(sSourceFile));
        return;
    }


В итоге новый in.txt в кодировке utf-8.

Затем беру этот новый in.txt и снова его конвертирую в туже utf-8.... Он ведь не должен меняться если он уже в этой кодировке? Или нет? или я туплю (
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 15.1.2025, 0:27