node_pcdata의 값을 설정할 때 pugixml이 잘못된 문자를 추가하는 것처럼 보입니다. 코드는 다음과 같습니다. 내가하려는 일은 base-64를 PNG로 인코딩하고 XML로 전송하는 것입니다. 필자는 base64로 인코딩 된 텍스트를 파일에 써서 pugixml과 별도로 확인했으며, 유효한 문자 인 4AAAAASUVORK5CYII=
으로 끝나는 것이 좋습니다. 그러나 ndAvatarData.set_value(avatarEnc)
호출은 동일한 실행 4AAAAASUVORK5CYII= cY 3XA+Рz
에 잘못된 문자를 추가합니다. 때로는 결과가 유효하지만 그 것을 반복 할 수는 없으므로 그 경우에 pugi 출력이 어떻게 생겼는지 알 수 없습니다.pugixml node_cdata, node_pcdata set_value() 유효하지 않은 문자
내가 여기서해야 할 일이 있습니까? 이것은 pugixml의 알려진 문제점입니까? 검색했지만이 문제를 논의하는 것을 찾을 수 없습니다.
내가
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.";
}