2012-01-20 23 views
1

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

私はここで何かする必要がありますか?これは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."; 
} 

答えて

1

これを取得していますが、それを考え出した - SET_VALUE()はNULL終端された文字列を望んでいます。

avatarEnc = new char[avatarEncSize+1]; 

avatarOut.read(avatarEnc, avatarEncSize); 

avatarEnc[avatarEncSize] = 0;