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)