Russian Qt Forum

Qt => XML => Тема начата: antipart от Октябрь 07, 2006, 19:53



Название: проблема со строками из xml
Отправлено: antipart от Октябрь 07, 2006, 19:53
Подскажите пожалуйста чайнику.
Загружаю в переменную типа QString  кириллические строчки из xml в кодировке utf8.
Все казалось бы хорошо - в смысле отображения, но в дальнейшем не могу ни изменить, ни удалить  содержимое  переменной.
Заранее спасибо за помощь и терпение.


Название: проблема со строками из xml
Отправлено: Dendy от Октябрь 08, 2006, 07:12
Что значит не можешь изменить? Все значения QString передаются как копии и именно с копией тьІ модешь делать все что угодно.


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 08, 2006, 08:15
Забыл ... проблема не только с кириллицей, но и с латинским шрифтом
копируемым из xml в код. utf8  приходится делать примерно такое шаманство :
QString fon_describe = (textNode.toText().data()).toLatin1();
если не перекодировать в момент копирования , то результат тот же -
немогу ни изменить (например fon_describe ="aaa") , ни удалить.
Причем пробовал удалять посимвольно с начала и с конца , пришел к выводу , что вся беда с последним символом, (т.е  если удалять сначала
удаляются все буквы кроме последней , если  с конца то ни одной)
скорее всего , что-то я делаю не так в момент первого присваивания или до конца не понимаю структуру utf8 строки


Название: проблема со строками из xml
Отправлено: Dendy от Октябрь 08, 2006, 09:28
Чесно. Я совершенно не вьехал в суть проблемьІ.
Что именно тьІ пьІтаешься изменить/удалить? Екземпляр QString? Или узел DOM'а?


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 08, 2006, 14:00
Xml  файл  у меня только считывается и более ничего я с ним не делаю...

Есть глобальная переменная типа QString  (допустим Str)....
В нее (Str) я копирую из xml строку с кодировкой Utf8 ....
Далее я не могу ее (Str)  ни изменить, ни удалить ...
Валит ошибки что-то связанное с Breakpoint, короче, с памятью....
Что только не пробовал см. выше....

С латинским текстом спасла перекодировка....
С кириллицей не знаю что делать....

Вот вобщем то и вся проблема , но  она меня уже достала.....:
не могу удалить объекты в которые входятЪ  такие строки как Str!!!
Думаю , что - то у меня с кодировкой Utf8...
НО скорее всего - КРИВЫЕ_ПАЛЬЦЫ.RU....


Название: проблема со строками из xml
Отправлено: Dendy от Октябрь 08, 2006, 18:35
Покажи код.


Название: проблема со строками из xml
Отправлено: bigirbis от Октябрь 09, 2006, 08:41
Интересно, каким образом инициализируется QDomDocument и как идет работа с кодировкой


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 09, 2006, 20:54
Вот отрывок кода:

QString test_goal;//глобальная переменная

bool LoadTest(QString fileName)
{
    QDomDocument doc;
    QFile file(fileName);
     if (!file.open(QFile::ReadOnly | QFile::Text)) {return false;}
   
     if (!doc.setContent(&file)) { return false;}
   
    QDomElement root = doc.documentElement();
    if (root.tagName() != "TEST_STRUCTURE") { return false;}
   

QDomNode node = root.firstChild();


  if (node.toElement().tagName() == "HEADER")
  {
       
    QDomNode childNode = node.firstChild();
         test_goal = childNode.toElement().text();
         childNode = childNode.nextSibling();
                     .....   и т.д.
   }
return true;
}
далее не могу, например : test_goal ="aaaf"; если удалять по одному символу, то не удаляется последний "f" ломается на этом месте

Если в test_goal копируется строка с латинскими буквами , то спасает
такое кривое  решение:
        .......

 if (node.toElement().tagName() == "HEADER")
  {
       
     QDomNode childNode = node.firstChild();
          QDomNode textNode = childNode_3.firstChild();
      test_goal = (textNode.toText().data()).toLatin1();
           childNode = childNode.nextSibling();
                     .....   и т.д.
   }

        .........

 Если кириллица , то .... капец.

                     
[/code]

добавлено спустя 7 минут:

 Прошу прощения ошибся
вместо   QDomNode textNode = childNode_3.firstChild();  надо
 QDomNode textNode = childNode.firstChild();


Название: проблема со строками из xml
Отправлено: Dendy от Октябрь 09, 2006, 22:51
Напиши код, с помощью которого тьІ удаляешь символьІ из QString.


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 11, 2006, 09:15
Вообще по разному пробовал...
Например так:
Код:
QString str = "asdf";
str.remove (0,1); // удаляется "а"
str.remove (0,1); // удаляется "s"
str.remove (0,1); // удаляется "d"
str.remove (0,1); //  "f" не удаляется - ломается

причем длину показывает правильно -1 символ и отображает его верно....


Название: проблема со строками из xml
Отправлено: bigirbis от Октябрь 11, 2006, 11:28
А что за версия Qt?


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 11, 2006, 14:18
Qt.Commercial.v4.0.1.for.Visual.Studio.6.0


Название: проблема со строками из xml
Отправлено: bigirbis от Октябрь 11, 2006, 14:26
Попробуй собрать на чем-нибудь поновее.


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 11, 2006, 14:43
Да рад бы , но к сожалению не видел ничего новее под VC 6.0
... требование такое (vc 6.0)...

добавлено спустя 5 минут:

 А вообще , в какую кодировку можно перевести Utf8_кириллическую_строку, чтобы
отображалось правильно?


Название: проблема со строками из xml
Отправлено: bigirbis от Октябрь 11, 2006, 15:06
Установи кодек при чтении на UTF-8
А когда на визуалке отображаешь, перекодируй в Unicode


Название: проблема со строками из xml
Отправлено: antipart от Октябрь 11, 2006, 15:30
а разве чтение не происходит по умолчанию в Utf8?

...в том то и дело, что потом  я уже ничего делать с ней не могу ,
даже перекодировать....

...если только в момент первого присваивания, при чтении из xml....
...как на этом этапе
Код:
 test_goal = (textNode.toText().data()).toLatin1();

перекодировать в Unicode  , вместо Latin1()?