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();

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


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(Rocky @ 26.2.2010, 18:57) *
Вот в этом месте я так поинмаю что name() возвращает не кодировку файла, а кодировку которую я выставил для всего приложения (вызовом статической функции)


по-моему да.


а что ты собственно хочешь сделать?

Цитата(Rocky @ 26.2.2010, 18:57) *
sWantedCodec.toStdString().c_str()

это минимум можно заменить
на
sWantedCodec.toAscii()
или
sWantedCodec.toLatin1()

Сообщение отредактировал kwisp - 26.2.2010, 19:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 28.12.2024, 8:32