crossplatform.ru

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

> проблема кодировок
eldar85
  опции профиля:
сообщение 27.9.2010, 12:35
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

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




Репутация:   0  


Такая проблемка, хочу чтобы поддерживались две кодировки 1251 и utf-8 в QTextEdite. Проект написан на utf-8 а в QString стоит кодировка 1251 это вызвано нуждами программы, так вот если я вывожу файл который сохранен в utf-8 то кирилица вся конечно же кашей и в начале этот долбаный знак "п»ї" означающий что файл в utf-8 .
Хотелось сделать чтобы прога понимала какой файл в нее вставляют и выводила нормальную кодировку.
написал такой код:
QFile file( "c:/....txt" );
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QMessageBox::about(this, tr( "Error" ),
                           tr( "<FONT color=red>Не возможно открыть файл!</FONT>" ));
    }
    else
    {

        QString tmp;
        tmp  = file.readAll();

        if( tmp.contains( "п»ї" ) )        //проблема тут, п»ї не видет и выводит все как 1251
            textForEdit->setText( tmp.toUtf8()  );
        else
            textForEdit->setText( tmp  );     //всегда срабатывает эта строка


        file.close();
}


но этот знак "п»ї" не видет прога так как проект написан в utf-8. Как же быть?

Сообщение отредактировал eldar85 - 27.9.2010, 15:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Sokoloff
  опции профиля:
сообщение 28.9.2010, 18:12
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Вот кусок из моего проекта, он на питоне, но идея думаю будет понятна.

     if f.open(QIODevice.ReadOnly | QIODevice.Text):
            self._cueData = QStringList()

            while not f.atEnd():
                self._cueData.append(QString(f.readLine()))

            #****************************************************
            # Delete BOM
            # see http://en.wikipedia.org/wiki/Byte_Order_Mark
            #****************************************************
            if (self._cueData[0].startsWith("\xEF\xBB\xBF")):   # UTF-8
                self._codePage = 'UTF-8'
                self._cueData[0] = self._cueData[0].remove(0, 3)

            if (self._cueData[0].startsWith("\xFE\xFF")):       # UTF-16 (BE)
                self._codePage = 'UTF-16BE'
                self._cueData[0] = self._cueData[0].remove(0, 2)

            if (self._cueData[0].startsWith("\xFF\xFE")):       # UTF-16 (LE)
                self._codePage = 'UTF-16LE'
                self._cueData[0] = self._cueData[0].remove(0, 2)

            self.parseCue(self._cueData)
            f.close()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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