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