Название: (РЕШЕНО) Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 16:30 Есть атрибут, который формируется из статической char* строки, для сохранения получаю его для QDomElement::setAttribute через tr(). В XML-файл записывается нормальная читаемая строка. При восстановлении в программе отображаются вопросительные знаки. Но если на месте этого атрибута в текстовом редакторе перебить по-русски, то восстанавливается нормальный текст. Я так понимаю, в файл записывается кодировка windows-1251, поскольку tr() в ней выдаёт. Но её почему-то xmldoc.setContent( &file ); не восстанавливает, хотя Locale задан. А если я в редакторе перебиваю, там получается UTF-8, и оно восстанавливается нормально. Но сохранять в UTF-8 нельзя, поскольку взаимодействует с программами, которые в файле требуют 8-и битную кодировку.
В настройках приложения задано: Код: QTextCodec::setCodecForTr(QTextCodec::codecForName( "windows-1251")); Где поправить, чтобы в xmldoc.setContent( &file ) с кодировками всё было однозначно, и можно было задавать такую же кодировку, как у tr()? Дальше не только windows-1251 потребуются. И надо еще при этом не сбить сохренение настроек в виде QSettings, он строки сам в виде QByteArray записывает, существенно не сбить ему кодировки. Чехарда с кодировками в Qt уже подзае... нет бы сделать одну установку на всё приложение, и чтобы везде всё было гомогенно. ЗЫ добавлял в начало документа Код: QDomNode xmlNode = xmldoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"charset-1251\"") Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Bepec от Апрель 28, 2015, 17:39 tr возвращает QString, т.е. UTF16.
Кодек для tr указывается для преобразования строки tr() в QString, нне? Как вы сохраняете файл? а как восстанавливаете? PS много слов, мало фактов. Достаточно было б "не восстанавливается, сохраняю вот так (код), восстанавливаю вот так (код)". Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 18:03 tr возвращает QString, т.е. UTF16. Кодек для tr указывается для преобразования строки tr() в QString, нне? Как вы сохраняете файл? а как восстанавливаете? PS много слов, мало фактов. Достаточно было б "не восстанавливается, сохраняю вот так (код), восстанавливаю вот так (код)". С кодеком для tr() всё в порядке. Сохраняю через QTextStream Код: QTextStream( &file ) << xmldoc.toString(); сохраняется всё, как хотелось. Восстанавливается кодировка не как надо. Загрузка простая: Код: if( file.open( QIODevice::ReadOnly ) ) ну и далее разбор загруженного в xmldoc. Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Bepec от Апрель 28, 2015, 18:09 Ну тут я вижу слабое место - QTextStream, у которого кодировка может не совпадать и скорее всего так и есть.
PS сделайте проще, сохраняйте сразу в файл, без стрима. Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 18:13 Ну тут я вижу слабое место - QTextStream, у которого кодировка может не совпадать и скорее всего так и есть. PS сделайте проще, сохраняйте сразу в файл, без стрима. Там проблемы нет. В файле та кодировка, которая нужна. Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Bepec от Апрель 28, 2015, 18:16 Прикрепите пример проекта, я его помучаю тогда.
Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 18:19 О, это возиться надо, проект создавать с нуля... Весь свой проект я дать не могу.
Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Bepec от Апрель 28, 2015, 18:21 Ну тогда пусть другие отвечают :)
Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 18:37 Я же всегда спрашиваю в надежде, что уже решал кто-то, чтобы экономить свое и чужое время.
Беда тут: Код: QString objname = interface.attribute( "objname" ); где interface - это Код: QDomElement interface = node.toElement(); Название: Re: Что управляет кодировками в QDomDocument? Отправлено: Гурман от Апрель 28, 2015, 18:48 Тфу шайтан... ошибка в строке указания кодировки в XML. Должно быть
Цитировать <?xml version="1.0" encoding="windows-1251"?> а я генерилЦитировать <?xml version="1.0" encoding="charset-1251"?> пепел мне на голову. |