1

node_pcdataの値を設定すると、pugixmlが無効な文字を追加しているようです。コードは以下のとおりです。私がやろうとしているのは、PNGをbase-64でエンコードし、XML経由で送信することです。私はbase-64でエンコードされたテキストをファイルに書き込んで、pugixmlとは別にチェックしましたが、見栄えがよく、これらの有効な文字で終わります4AAAAASUVORK5CYII=。しかし、ndAvatarData.set_value(avatarEnc)呼び出しは同じ実行に対して無効な文字を追加しています4AAAAASUVORK5CYII= cY 3XA+Рz。結果が有効な場合もありますが、それを繰り返すことができなかったため、その場合のpugi出力がどのようになるかわかりません。

ここでやらなければならないことはありますか?これはpugixmlの既知の問題ですか?検索しましたが、この問題について説明しているものは見つかりませんでした。

これはVisualC++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.";
}
4

1 に答える 1

1

それを理解しました-set_value()はnullで終了する文字列を必要としています。

avatarEnc = new char[avatarEncSize+1];

avatarOut.read(avatarEnc, avatarEncSize);

avatarEnc[avatarEncSize] = 0;
于 2012-01-21T19:08:24.493 に答える