LINUX.ORG.RU

qt4 прочитать русский текст из xml

 ,


0

1

Всем доброго времени суток.

Есть такая xml-ка:

<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user id="1">
    <name>Имя на русском</name>
  </user>
</users>

Пытаюсь прочитать ее, используя dom:

#include <QtXml>

int main (int argc, char **argv) {
	QDomDocument domDoc;
	QFile file ("users.xml");	
	if (file.open (QIODevice::ReadOnly)) {
		if (domDoc.setContent (&file)) {
			QDomElement docEl = domDoc.documentElement ();
			QDomNode node = docEl.firstChild ();
			while (!node.isNull ()) {
				qDebug () << node.nodeName ();
				QDomElement el = node.toElement ();
				if (!el.isNull ()) {
					QDomElement name = el.elementsByTagName ("name").at (0).toElement ();
					qDebug () << name.nodeName ();
					qDebug () << name.text ();
				}
				node = node.nextSibling ();
			}
		}
		file.close ();
	}
}

В результате русские символы просто не выводятся.

Не подскажете, как быть? Google ничего точно сказать не смог =(

Заранее спасибо.

P.S.: Хотелось бы использовать именно dom, так как реально структура xml будет сложнее. Это просто тестовый пример.

★★

У меня из XML все нормально читается.

    QTextCodec *russianCodec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(russianCodec);
//  QTextCodec::setCodecForCStrings(russianCodec);
    QTextCodec::setCodecForLocale(russianCodec);

Можно еще с QTextDecoder поиграться.

unfo ★★★★★
()
qDebug () << name.text ();

Мне кажется - проблема в кодеке внутри QDebug, так как QString о умолчанию юникодовая. Ради эксперимента попробуй:

std::wcout << node.text().toStdWString() << std::endl;

KennyMinigun ★★★★★
()
Ответ на: комментарий от unfo

Отлично, спасибо большое, это помогло!

Не знал про setCodecForLocale, а просто setCodecForTr и setCodecForCStrings не помогали.

solovey ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.