Russian Qt Forum
Сентябрь 21, 2024, 13:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QXmlSimpleReader и кирилица  (Прочитано 8380 раз)
fynjy
Гость
« : Май 05, 2009, 15:06 »

Собственно имеется код в виде трёх файлов (все файлы имеют кодировку UTF-8):
Код:
//test.cpp
#include <QtCore>
#include <QtXml>

class CContentHandler: public QXmlDefaultHandler
{
public:
  CContentHandler(QTextStream &aOut):iOut(aOut){};
protected:
  bool characters(const QString &ch);
protected:
  QTextStream &iOut;
};

bool CContentHandler::characters(const QString &ch)
{
  iOut << "ch: [" << ch << "]\n";
  return true;
}

int main(int /*argc*/, char** /*argv*/)
{
  QXmlSimpleReader reader;
  QString str;
  QFile input("test.xml");
  QFile output("out.txt");
  QXmlInputSource source(&input);

  if (output.open(QFile::WriteOnly bitor QFile::Truncate))
    {
      QTextStream out(&output);
      CContentHandler handler(out);

      out << "Привет мир!!!\n";
      reader.setContentHandler(&handler);
      reader.parse(source);
    }
  return 0;
}

// test.pro
QT += xml
TEMPLATE = app
SOURCES = test.cpp

// test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<zzz>Привет мир!!!</zzz>
После прогона появляется файл out.txt следующего содержания:
Код:
Привет мир!!!
ch: [?????? ???!!!]
Вопрос: откуда взялись знаки вопроса (символы с кодом 0x3F)? И как увидеть кирилицу в UTF-8 в out.txt?
Заранее, спасибо.

установлено openSuSE 11.1 x86_64 и qt 4.5.1. Исходники теста прилагаются.
Записан
spirit
Гость
« Ответ #1 : Май 05, 2009, 15:17 »

установи кодек явно используя QTextStream::setCodec.
Записан
fynjy
Гость
« Ответ #2 : Май 05, 2009, 15:37 »

Добавил:
out.setCodec("UTF-8");
Перед:
out << "Привет мир!!!\n";
Первая строка файла стала
ÐÑÐ¸Ð²ÐµÑ Ð¼Ð¸Ñ!!!
зато вторая нормуль:
ch: [Привет мир!!!]
хмм... Видимо таки кодировки где-то настроить надо... В общем спасибо...
PS. где можно дефолтные кодировки посмотреть?
« Последнее редактирование: Май 05, 2009, 15:40 от fynjy » Записан
spirit
Гость
« Ответ #3 : Май 05, 2009, 15:39 »

Qt utf-16 юзает поумолчанию.
Записан
fynjy
Гость
« Ответ #4 : Май 05, 2009, 15:41 »

ок спасибо, вопрос снят.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 20.