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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как читать Enter'ы?  (Прочитано 8799 раз)
PulSar.CE3194694
Гость
« : Август 01, 2011, 15:09 »

День добрый!
Пишу себе читалку Fb2. Нужно прочитать бинарник в тэге <binary> для обложки книги. Значит, написал код, он хорошо работает, но есть проблема. Он не хочет читать именно бинарники. Все остальные данные, заключенные в тэгах читает, а это нет. Похимичев, пришел к выводу, что не читает  их из-за Enter'ов. Вот пример файла (обрезанный):
Код
XML
<binary id="cover.jpg" content-type="image/jpeg">/9j/4QEuRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAAB
AAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodpAAQAAAABAAAAnAAA
AMgAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIDcuMAAyMDAzOjAzOjMxIDEwOjUy
OjI1AAAAAAOgAQADAAAAAf//AACgAgAEAAAAAQAAARigAwAEAAAAAQAAAdIAAAAAAAAABgED
AAMAAAABAAYAAAEaAAUAAAABAAABFgEbAAUAAAABAAABHgEoAAMAAAABAAIAAAIBAAQAAAAB
AAABJgICAAQAAAABAAAAAAAAAAAAAABIAAAAAQAAAEgAAAAB/+0FolBob3Rvc2hvcCAzLjAA
OEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D7QAAAAAAEABIAAAAAQACAEgAAAAB
AAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAHg4QklNBBkAAAAA
AAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0ECgAAAAAAAQAAOEJJTScQAAAAAAAK
AAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAA
AAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA
/////////////////////////////wPoAAAAAP////////////////////////////8D6AAA
AAD/////////////////////////////A+gAAAAA/////////////////////////////wPo
AAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAA
AAADSQAAAAYAAAAAAAAAAAAAAU0AAADIAAAACgBVAG4AdABpAHQAbABlAGQALQAxAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAADIAAABTQAAAAAAAAAAAAAAAAAAAAABAAAA
AAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEA
AAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21s
b25nAAABTQAAAABSZ2h0bG9uZwAAAMgAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAA
BXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9y
aWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0A
AAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQA
AAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAU0AAAAAUmdo
dGxvbmcAAADIAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRF<binary>
Тут после каждой строки нажата клавиша Enter. Их-за этого в консоль вместо всего этого выводится: "". как быть?
Записан
Странник
Гость
« Ответ #1 : Август 01, 2011, 15:20 »

как читаете, как преобразовываете? код в студию!
Записан
PulSar.CE3194694
Гость
« Ответ #2 : Август 01, 2011, 15:33 »

Код:
void Parser::binaryParser(QDomNode node)
{
    QString id = node.attributes().item(1).nodeValue();
    char format = node.attributes().item(0).nodeValue().section("/", -1,-1).toUpper().data()->toAscii();
    QByteArray bytes;
    bytes.append(node.firstChild().toText().data());
    qDebug()<<node.firstChild().toText().data();
    QPixmap *image = new QPixmap();
    image->loadFromData(bytes, &format);
}
Если Enter'ов нет, то все ок. Специально проверял.
Записан
Странник
Гость
« Ответ #3 : Август 01, 2011, 15:47 »

где-то вы врете..а преобразование из Base64 где? попробуйте:
Код:
void Parser::binaryParser(QDomNode node)
{
    QString id = node.attributes().item(1).nodeValue();
    char format = node.attributes().item(0).nodeValue().section("/", -1,-1).toUpper().data()->toAscii();
    QByteArray bytes = node.firstChild().toText().data().toLatin1();
    
    QPixmap *image = new QPixmap();
    image->loadFromData(QByteArray::fromBase64(bytes), &format);
}
Записан
PulSar.CE3194694
Гость
« Ответ #4 : Август 01, 2011, 16:24 »

Спасибо, но дело не совсем в этом)
Я извлекаю данные из тэга таким образом: node.firstChild().toText().data(). Так вот если эту инструкцию в qDebug() отправить, то в консоли будет пустая строка. Проблема не в записи в массив, а в извлечении текста картинки из xml документа.
Записан
Странник
Гость
« Ответ #5 : Август 01, 2011, 17:04 »

node.toElement().text() что возвращает?
Записан
PulSar.CE3194694
Гость
« Ответ #6 : Август 01, 2011, 17:23 »

Ничего не возвращает. В консоли ничего не появляется, будто qDebug() и вовсе не написан.
Ну вот Вы попробуйте открыть этот бинарник (чтобы в консоли цифры-буквы появились).
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Август 01, 2011, 17:47 »

а то, что тег заканчивается на <binary> (без слеша) - так и должно быть или опечатка в посте?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Странник
Гость
« Ответ #8 : Август 01, 2011, 17:48 »

опечатка, но работает в любом случае (Qt 4.7.3, Windows). уверены, что правильно парсите?
Код:
QFile file(QString("test.xml"));
file.open(QIODevice::ReadOnly);

QDomDocument document;
document.setContent(&file);

QDomElement element = document.firstChildElement();
qDebug() << element.tagName() << element.attributes().item(0).nodeValue() << element.attributes().item(1).nodeValue() << element.text();
где test.xml содержит приведенный вами пример, парсит на ура. проверяйте входные данные функции.

p.s.
ваш код у меня тоже работает.
« Последнее редактирование: Август 01, 2011, 17:57 от Странник » Записан
SeverusSnape
Гость
« Ответ #9 : Август 02, 2011, 09:35 »

Удалите символ "\n" как  вариант
Записан
PulSar.CE3194694
Гость
« Ответ #10 : Август 02, 2011, 09:57 »

Все, получилось! Странно, чудеса...
Записан
Странник
Гость
« Ответ #11 : Август 02, 2011, 10:09 »

Удалите символ "\n" как  вариант
он здесь точно ни при чем. xml-парсеру не мешает, преобразованию из base64 тоже.
Записан
SeverusSnape
Гость
« Ответ #12 : Август 02, 2011, 12:35 »

Все, получилось! Странно, чудеса...

Каким образом, если не секрет?
Записан
PulSar.CE3194694
Гость
« Ответ #13 : Август 02, 2011, 15:02 »

Не знаю... Код отсюда скопировал, открыл, получилось. Открыл настоящие книги с бинарями - тоже поучилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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