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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: проблема со строками из xml  (Прочитано 12814 раз)
antipart
Гость
« : Октябрь 07, 2006, 19:53 »

Подскажите пожалуйста чайнику.
Загружаю в переменную типа QString  кириллические строчки из xml в кодировке utf8.
Все казалось бы хорошо - в смысле отображения, но в дальнейшем не могу ни изменить, ни удалить  содержимое  переменной.
Заранее спасибо за помощь и терпение.
Записан
Dendy
Гость
« Ответ #1 : Октябрь 08, 2006, 07:12 »

Что значит не можешь изменить? Все значения QString передаются как копии и именно с копией тьІ модешь делать все что угодно.
Записан
antipart
Гость
« Ответ #2 : Октябрь 08, 2006, 08:15 »

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

Чесно. Я совершенно не вьехал в суть проблемьІ.
Что именно тьІ пьІтаешься изменить/удалить? Екземпляр QString? Или узел DOM'а?
Записан
antipart
Гость
« Ответ #4 : Октябрь 08, 2006, 14:00 »

Xml  файл  у меня только считывается и более ничего я с ним не делаю...

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

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

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

Покажи код.
Записан
bigirbis
Гость
« Ответ #6 : Октябрь 09, 2006, 08:41 »

Интересно, каким образом инициализируется QDomDocument и как идет работа с кодировкой
Записан
antipart
Гость
« Ответ #7 : Октябрь 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();
Записан
Dendy
Гость
« Ответ #8 : Октябрь 09, 2006, 22:51 »

Напиши код, с помощью которого тьІ удаляешь символьІ из QString.
Записан
antipart
Гость
« Ответ #9 : Октябрь 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 символ и отображает его верно....
Записан
bigirbis
Гость
« Ответ #10 : Октябрь 11, 2006, 11:28 »

А что за версия Qt?
Записан
antipart
Гость
« Ответ #11 : Октябрь 11, 2006, 14:18 »

Qt.Commercial.v4.0.1.for.Visual.Studio.6.0
Записан
bigirbis
Гость
« Ответ #12 : Октябрь 11, 2006, 14:26 »

Попробуй собрать на чем-нибудь поновее.
Записан
antipart
Гость
« Ответ #13 : Октябрь 11, 2006, 14:43 »

Да рад бы , но к сожалению не видел ничего новее под VC 6.0
... требование такое (vc 6.0)...

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

 А вообще , в какую кодировку можно перевести Utf8_кириллическую_строку, чтобы
отображалось правильно?
Записан
bigirbis
Гость
« Ответ #14 : Октябрь 11, 2006, 15:06 »

Установи кодек при чтении на UTF-8
А когда на визуалке отображаешь, перекодируй в Unicode
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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