Domanda

Pugixml sembra aggiungere caratteri non validi quando imposto il valore di un node_pcdata. Il codice è di seguito. Quello che sto cercando di fare è Base-64 codificare un PNG e inviarlo tramite XML. Ho scritto il testo codificato Base-64 su un file per controllarlo separatamente da Pugixml e sembra buono, terminando con questi caratteri validi 4AAAAASUVORK5CYII=. Ma il ndAvatarData.set_value(avatarEnc) La chiamata sta aggiungendo caratteri non validi per la stessa corsa 4AAAAASUVORK5CYII= cY 3XA+Рz. Occasionalmente il risultato è valido, ma non sono stato in grado di ripeterlo, quindi non so come sia l'uscita Pugi in quel caso.

C'è qualcosa che devo fare qui? È un problema noto con pugixml? Ho cercato ma non sono riuscito a trovare nulla di discutere questo problema.

Lo sto ottenendo in Visual C ++ 2010.

char* avatarEnc = NULL;
try {
    std::ifstream avatarIn("MyAvatar.png", std::ios_base::in | std::ios_base::binary);
    if (!avatarIn.is_open())
        cerr << "Could not open avatar file!";
    else {
        base64::encoder E;
        stringstream  avatarOut;
        E.encode(avatarIn, avatarOut);

        avatarOut.seekg(0, ios::end);
        int avatarEncSize = avatarOut.tellg();
        avatarOut.seekg(0, ios::beg);

        avatarEnc = new char[avatarEncSize];
        avatarOut.read(avatarEnc, avatarEncSize);

        std::ofstream tempOut("avatarEnc.txt", std::ios_base::out | std::ios_base::binary);
        tempOut.write(avatarEnc, avatarEncSize);

        xml_node ndAvatar = root.append_child("avatar");
        xml_node ndAvatarData = ndAvatar.append_child(pugi::node_pcdata);
        ndAvatarData.set_value(avatarEnc);
    }
}
catch (...) {
    cerr << "Error loading avatar.";
}

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top