2012-01-20 3 views
1

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

답변

1

2010 년이 그것을 알아 냈 Visual C++에서이납니다 -) (SET_VALUE는 null로 끝나는 문자열을 원한다.

avatarEnc = new char[avatarEncSize+1]; 

avatarOut.read(avatarEnc, avatarEncSize); 

avatarEnc[avatarEncSize] = 0; 
관련 문제