#include <string>
#include <sstream>
#include <iostream>
std::string hex( unsigned int c )
{
std::ostringstream stm ;
stm << '%' << std::hex << std::uppercase << c ;
return stm.str() ;
}
std::string url_encode( const std::string& str )
{
static const std::string unreserved = "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"-_.~" ;
std::string result ;
for( unsigned char c : str )
{
if( unreserved.find(c) != std::string::npos ) result += c ;
else result += hex(c) ;
}
return result ;
}
int main()
{
std::string test = u8"čau" ;
std::cout << test;
std::cout << test << '\n'
<< url_encode(test) << '\n' ;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnN0ZDo6c3RyaW5nIGhleCggdW5zaWduZWQgaW50IGMgKQp7CiAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RtIDsKICAgIHN0bSA8PCAnJScgPDwgc3RkOjpoZXggPDwgc3RkOjp1cHBlcmNhc2UgPDwgYyA7CiAgICByZXR1cm4gc3RtLnN0cigpIDsKfQoKc3RkOjpzdHJpbmcgdXJsX2VuY29kZSggY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciApCnsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyB1bnJlc2VydmVkID0gIjAxMjM0NTY3ODkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLV8ufiIgOwogICAgc3RkOjpzdHJpbmcgcmVzdWx0IDsKCiAgICBmb3IoIHVuc2lnbmVkIGNoYXIgYyA6IHN0ciApCiAgICB7CiAgICAgICAgaWYoIHVucmVzZXJ2ZWQuZmluZChjKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyApIHJlc3VsdCArPSBjIDsKICAgICAgICBlbHNlIHJlc3VsdCArPSBoZXgoYykgOwogICAgfQoKICAgIHJldHVybiByZXN1bHQgOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nIHRlc3QgPSB1OCLEjWF1IiA7CiAgICBzdGQ6OmNvdXQgPDwgdGVzdDsKICAgIHN0ZDo6Y291dCA8PCB0ZXN0IDw8ICdcbicKICAgICAgICAgICAgICAgPDwgdXJsX2VuY29kZSh0ZXN0KSA8PCAnXG4nIDsKfQo=