1

当我设置 node_pcdata 的值时,pugixml 似乎添加了无效字符。代码如下。我想做的是base-64编码一个PNG并通过XML发送。我将 base-64 编码的文本写入一个文件,以便与 pugixml 分开检查,它看起来不错,以这些有效字符结尾4AAAAASUVORK5CYII=。但ndAvatarData.set_value(avatarEnc)调用是为同一次运行添加无效字符4AAAAASUVORK5CYII= cY 3XA+Рz。有时结果是有效的,但我无法重复,所以我不知道在这种情况下 pugi 输出是什么样的。

我需要在这里做些什么吗?这是 pugixml 的已知问题吗?我搜索但找不到任何讨论这个问题的东西。

我在 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.";
}
4

1 回答 1

1

想通了 - set_value() 想要一个以空字符结尾的字符串。

avatarEnc = new char[avatarEncSize+1];

avatarOut.read(avatarEnc, avatarEncSize);

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