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
28namespace Poco {
29
30
31class 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{
39public:
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 convert(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 convert(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 convert(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 convert(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 convert(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 convert(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