/* * Character Set Handling * (C) 1999-2007 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_CHARSET_H_ #define BOTAN_CHARSET_H_ #include #include BOTAN_FUTURE_INTERNAL_HEADER(charset.h) namespace Botan { /** * Convert a sequence of UCS-2 (big endian) characters to a UTF-8 string * This is used for ASN.1 BMPString type * @param ucs2 the sequence of UCS-2 characters * @param len length of ucs2 in bytes, must be a multiple of 2 */ std::string BOTAN_UNSTABLE_API ucs2_to_utf8(const uint8_t ucs2[], size_t len); /** * Convert a sequence of UCS-4 (big endian) characters to a UTF-8 string * This is used for ASN.1 UniversalString type * @param ucs4 the sequence of UCS-4 characters * @param len length of ucs4 in bytes, must be a multiple of 4 */ std::string BOTAN_UNSTABLE_API ucs4_to_utf8(const uint8_t ucs4[], size_t len); /** * Convert a UTF-8 string to Latin-1 * If a character outside the Latin-1 range is encountered, an exception is thrown. */ std::string BOTAN_UNSTABLE_API utf8_to_latin1(const std::string& utf8); /** * The different charsets (nominally) supported by Botan. */ enum Character_Set { LOCAL_CHARSET, UCS2_CHARSET, UTF8_CHARSET, LATIN1_CHARSET }; namespace Charset { /* * Character set conversion - avoid this. * For specific conversions, use the functions above like * ucs2_to_utf8 and utf8_to_latin1 * * If you need something more complex than that, use a real library * such as iconv, Boost.Locale, or ICU */ std::string BOTAN_PUBLIC_API(2,0) BOTAN_DEPRECATED("Avoid. See comment in header.") transcode(const std::string& str, Character_Set to, Character_Set from); /* * Simple character classifier functions */ bool BOTAN_PUBLIC_API(2,0) is_digit(char c); bool BOTAN_PUBLIC_API(2,0) is_space(char c); bool BOTAN_PUBLIC_API(2,0) caseless_cmp(char x, char y); uint8_t BOTAN_PUBLIC_API(2,0) char2digit(char c); char BOTAN_PUBLIC_API(2,0) digit2char(uint8_t b); } } #endif