| 1 | // | 
|---|
| 2 | // UnicodeConverter.h | 
|---|
| 3 | // | 
|---|
| 4 | // Library: Foundation | 
|---|
| 5 | // Package: Text | 
|---|
| 6 | // Module:  UnicodeConverter | 
|---|
| 7 | // | 
|---|
| 8 | // Definition of the UnicodeConverter class. | 
|---|
| 9 | // | 
|---|
| 10 | // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. | 
|---|
| 11 | // and Contributors. | 
|---|
| 12 | // | 
|---|
| 13 | // SPDX-License-Identifier:	BSL-1.0 | 
|---|
| 14 | // | 
|---|
| 15 |  | 
|---|
| 16 |  | 
|---|
| 17 | #ifndef Foundation_UnicodeConverter_INCLUDED | 
|---|
| 18 | #define Foundation_UnicodeConverter_INCLUDED | 
|---|
| 19 |  | 
|---|
| 20 |  | 
|---|
| 21 | #include "Poco/Foundation.h" | 
|---|
| 22 |  | 
|---|
| 23 | #if !defined(POCO_NO_WSTRING) | 
|---|
| 24 |  | 
|---|
| 25 | #include "Poco/UTFString.h" | 
|---|
| 26 |  | 
|---|
| 27 |  | 
|---|
| 28 | namespace Poco { | 
|---|
| 29 |  | 
|---|
| 30 |  | 
|---|
| 31 | class Foundation_API UnicodeConverter | 
|---|
| 32 | /// A convenience class that converts strings from | 
|---|
| 33 | /// UTF-8 encoded std::strings to UTF-16 or UTF-32 encoded std::wstrings | 
|---|
| 34 | /// and vice-versa. | 
|---|
| 35 | /// | 
|---|
| 36 | /// This class is mainly used for working with the Unicode Windows APIs | 
|---|
| 37 | /// and probably won't be of much use anywhere else ??? | 
|---|
| 38 | { | 
|---|
| 39 | public: | 
|---|
| 40 | static void convert(const std::string& utf8String, UTF32String& utf32String); | 
|---|
| 41 | /// Converts the given UTF-8 encoded string into an UTF-32 encoded wide string. | 
|---|
| 42 |  | 
|---|
| 43 | static void convert(const char* utf8String,  std::size_t length, UTF32String& utf32String); | 
|---|
| 44 | /// Converts the given UTF-8 encoded character sequence into an UTF-32 encoded wide string. | 
|---|
| 45 |  | 
|---|
| 46 | static void convert(const char* utf8String, UTF32String& utf32String); | 
|---|
| 47 | /// Converts the given zero-terminated UTF-8 encoded character sequence into an UTF-32 encoded wide string. | 
|---|
| 48 |  | 
|---|
| 49 | static void convert(const std::string& utf8String, UTF16String& utf16String); | 
|---|
| 50 | /// Converts the given UTF-8 encoded string into an UTF-16 encoded wide string. | 
|---|
| 51 |  | 
|---|
| 52 | static void convert(const char* utf8String,  std::size_t length, UTF16String& utf16String); | 
|---|
| 53 | /// Converts the given UTF-8 encoded character sequence into an UTF-16 encoded wide string. | 
|---|
| 54 |  | 
|---|
| 55 | static void convert(const char* utf8String, UTF16String& utf16String); | 
|---|
| 56 | /// Converts the given zero-terminated UTF-8 encoded character sequence into an UTF-16 encoded wide string. | 
|---|
| 57 |  | 
|---|
| 58 | static void (const UTF16String& utf16String, std::string& utf8String); | 
|---|
| 59 | /// Converts the given UTF-16 encoded wide string into an UTF-8 encoded string. | 
|---|
| 60 |  | 
|---|
| 61 | static void (const UTF32String& utf32String, std::string& utf8String); | 
|---|
| 62 | /// Converts the given UTF-32 encoded wide string into an UTF-8 encoded string. | 
|---|
| 63 |  | 
|---|
| 64 | static void (const UTF16Char* utf16String,  std::size_t length, std::string& utf8String); | 
|---|
| 65 | /// Converts the given zero-terminated UTF-16 encoded wide character sequence into an UTF-8 encoded string. | 
|---|
| 66 |  | 
|---|
| 67 | static void (const UTF32Char* utf16String, std::size_t length, std::string& utf8String); | 
|---|
| 68 | /// Converts the given zero-terminated UTF-32 encoded wide character sequence into an UTF-8 encoded string. | 
|---|
| 69 |  | 
|---|
| 70 | static void (const UTF16Char* utf16String, std::string& utf8String); | 
|---|
| 71 | /// Converts the given UTF-16 encoded zero terminated character sequence into an UTF-8 encoded string. | 
|---|
| 72 |  | 
|---|
| 73 | static void (const UTF32Char* utf32String, std::string& utf8String); | 
|---|
| 74 | /// Converts the given UTF-32 encoded zero terminated character sequence into an UTF-8 encoded string. | 
|---|
| 75 |  | 
|---|
| 76 | template <typename F, typename T> | 
|---|
| 77 | static void toUTF32(const F& f, T& t) | 
|---|
| 78 | { | 
|---|
| 79 | convert(f, t); | 
|---|
| 80 | } | 
|---|
| 81 |  | 
|---|
| 82 | template <typename F, typename T> | 
|---|
| 83 | static void toUTF32(const F& f, std::size_t l, T& t) | 
|---|
| 84 | { | 
|---|
| 85 | convert(f, l, t); | 
|---|
| 86 | } | 
|---|
| 87 |  | 
|---|
| 88 | template <typename F, typename T> | 
|---|
| 89 | static void toUTF16(const F& f, T& t) | 
|---|
| 90 | { | 
|---|
| 91 | convert(f, t); | 
|---|
| 92 | } | 
|---|
| 93 |  | 
|---|
| 94 | template <typename F, typename T> | 
|---|
| 95 | static void toUTF16(const F& f, std::size_t l, T& t) | 
|---|
| 96 | { | 
|---|
| 97 | convert(f, l, t); | 
|---|
| 98 | } | 
|---|
| 99 |  | 
|---|
| 100 | template <typename F, typename T> | 
|---|
| 101 | static void toUTF8(const F& f, T& t) | 
|---|
| 102 | { | 
|---|
| 103 | convert(f, t); | 
|---|
| 104 | } | 
|---|
| 105 |  | 
|---|
| 106 | template <typename F, typename T> | 
|---|
| 107 | static void toUTF8(const F& f, std::size_t l, T& t) | 
|---|
| 108 | { | 
|---|
| 109 | convert(f, l, t); | 
|---|
| 110 | } | 
|---|
| 111 |  | 
|---|
| 112 | template <typename T> | 
|---|
| 113 | static T to(const char* pChar) | 
|---|
| 114 | { | 
|---|
| 115 | T utfStr; | 
|---|
| 116 | Poco::UnicodeConverter::convert(pChar, utfStr); | 
|---|
| 117 | return utfStr; | 
|---|
| 118 | } | 
|---|
| 119 |  | 
|---|
| 120 |  | 
|---|
| 121 | template <typename T> | 
|---|
| 122 | static T to(const std::string& str) | 
|---|
| 123 | { | 
|---|
| 124 | T utfStr; | 
|---|
| 125 | Poco::UnicodeConverter::convert(str, utfStr); | 
|---|
| 126 | return utfStr; | 
|---|
| 127 | } | 
|---|
| 128 |  | 
|---|
| 129 | template <typename T> | 
|---|
| 130 | static std::size_t UTFStrlen(const T* ptr) | 
|---|
| 131 | /// Returns the length (in characters) of a zero-terminated UTF string. | 
|---|
| 132 | { | 
|---|
| 133 | if (ptr == 0) return 0; | 
|---|
| 134 | const T* p; | 
|---|
| 135 | for (p = ptr; *p; ++p); | 
|---|
| 136 | return p - ptr; | 
|---|
| 137 | } | 
|---|
| 138 | }; | 
|---|
| 139 |  | 
|---|
| 140 |  | 
|---|
| 141 | } // namespace Poco | 
|---|
| 142 |  | 
|---|
| 143 |  | 
|---|
| 144 | #endif // POCO_OS_FAMILY_WINDOWS && !POCO_NO_WSTRING | 
|---|
| 145 |  | 
|---|
| 146 |  | 
|---|
| 147 | #endif // Foundation_UnicodeConverter_INCLUDED | 
|---|
| 148 |  | 
|---|