
I struggled with this issue regarding base64 when I made the serialization library. I never felt I found the right way to address it. I did manage to address in the serialization library by reading only thie required characters. Unfortunately, I think the current implemetation also breaks more iterator rules than it should. So I would like to see a clean fix for this to make it useful as a more general purpose tool. I hadn't thought of a padding filter - maybe that's a worthy idea. So I havn't got a lot more to say about this for now. Robert Ramey ????? ???????? wrote:
Hello, I have the following code:
#include <boost/archive/iterators/binary_from_base64.hpp> #include <boost/archive/iterators/base64_from_binary.hpp> #include <boost/archive/iterators/insert_linebreaks.hpp> #include <boost/archive/iterators/remove_whitespace.hpp> #include <boost/archive/iterators/transform_width.hpp>
#include <string> #include <exception> #include <iostream>
int main() { using namespace boost::archive::iterators;
typedef insert_linebreaks< base64_from_binary< transform_width< std::string::const_iterator, 6, sizeof( char ) * 8 >
,72 to_base64_type;
typedef transform_width< binary_from_base64< remove_whitespace< std::string::const_iterator >
, sizeof( char ) * 8, 6 to_binary_type;
std::string hello_ = "hello";
std::string base64_hello_( to_base64_type( hello_.begin() ) , to_base64_type( hello_.end() ) );
std::cout << base64_hello_ << std::endl;
try { std::string hello_recovered_( to_binary_type( base64_hello_.begin() ) , to_binary_type( base64_hello_.end() ) );
std::cout << hello_recovered_ << std::endl; } catch ( const std::exception& e_ ) { std::cerr << e_.what() << std::endl; }
return 0; }
During base64 decode we have following exception: "attempt to decode a value not in base64 char set". We have the problem because source string hello_ = "hello", has length % 3 != 0, otherwise we don't have this exception. As I know in this case we should add appropriate number of special symbol like '='. I can add '=' manually, but boost base64 decode can't process them, and we also have exception
If we have insert_linebreaks/remove_whitespace filter perhaps we also should have some symmetric filter for text padding? Do we have padding filter in boost? Or perhaps it will be in future?
Thanks
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost