8 #include <botan/charset.h>     9 #include <botan/parsing.h>    10 #include <botan/exceptn.h>    22 std::string ucs2_to_latin1(
const std::string& ucs2)
    24    if(ucs2.size() % 2 == 1)
    29    for(
size_t i = 0; i != ucs2.size(); i += 2)
    31       const byte c1 = ucs2[i];
    32       const byte c2 = ucs2[i+1];
    37       latin1 += 
static_cast<char>(c2);
    46 std::string utf8_to_latin1(
const std::string& utf8)
    51    while(position != utf8.size())
    53       const byte c1 = 
static_cast<byte>(utf8[position++]);
    56          iso8859 += 
static_cast<char>(c1);
    57       else if(c1 >= 0xC0 && c1 <= 0xC7)
    59          if(position == utf8.size())
    62          const byte c2 = 
static_cast<byte>(utf8[position++]);
    63          const byte iso_char = ((c1 & 0x07) << 6) | (c2 & 0x3F);
    68          iso8859 += 
static_cast<char>(iso_char);
    80 std::string latin1_to_utf8(
const std::string& iso8859)
    83    for(
size_t i = 0; i != iso8859.size(); ++i)
    85       const byte c = 
static_cast<byte>(iso8859[i]);
    88          utf8 += 
static_cast<char>(c);
    91          utf8 += 
static_cast<char>((0xC0 | (c >> 6)));
    92          utf8 += 
static_cast<char>((0x80 | (c & 0x3F)));
   115       return latin1_to_utf8(str);
   117       return utf8_to_latin1(str);
   119       return ucs2_to_latin1(str);
   130    if(c == 
'0' || c == 
'1' || c == 
'2' || c == 
'3' || c == 
'4' ||
   131       c == 
'5' || c == 
'6' || c == 
'7' || c == 
'8' || c == 
'9')
   141    if(c == 
' ' || c == 
'\t' || c == 
'\n' || c == 
'\r')
   195    return (std::tolower(static_cast<unsigned char>(a)) ==
   196            std::tolower(static_cast<unsigned char>(b)));
 bool caseless_cmp(char a, char b)
std::invalid_argument Invalid_Argument
std::string transcode(const std::string &str, Character_Set to, Character_Set from)
std::string to_string(u64bit n, size_t min_len)