28 namespace UtfConverter
31 std::basic_string<char32_t>
FromUtf8(
const std::string& utf8string)
36 if (utf8string.empty())
37 return std::basic_string<char32_t>();
38 size_t widesize = utf8string.length();
39 if (
sizeof(char32_t) == 2)
41 std::basic_string<char32_t> resultstring;
42 resultstring.resize(widesize+1, U
'\0');
43 const UTF8* sourcestart =
reinterpret_cast<const UTF8*
>(utf8string.c_str());
44 const UTF8* sourceend = sourcestart + widesize;
45 UTF16* targetstart =
reinterpret_cast<UTF16*
>(&resultstring[0]);
46 UTF16* ts = targetstart;
47 UTF16* targetend = targetstart + widesize;
64 return std::basic_string<char32_t>(resultstring, 0, targetstart - ts);
66 else if (
sizeof(char32_t) == 4)
68 std::basic_string<char32_t> resultstring;
69 resultstring.resize(widesize+1, U
'\0');
70 const UTF8* sourcestart =
reinterpret_cast<const UTF8*
>(utf8string.c_str());
71 const UTF8* sourceend = sourcestart + widesize;
72 UTF32* targetstart =
reinterpret_cast<UTF32*
>(&resultstring[0]);
73 UTF32* ts = targetstart;
74 UTF32* targetend = targetstart + widesize;
91 return std::basic_string<char32_t>(resultstring, 0, targetstart - ts);
100 std::string
ToUtf8(
const std::basic_string<char32_t>& widestring)
102 #ifdef CRN_NO_WSTRING
105 if (widestring.empty())
106 return std::string();
108 size_t widesize = widestring.length();
110 if (
sizeof(char32_t) == 2)
112 size_t utf8size = 3 * widesize + 1;
113 std::string resultstring;
114 resultstring.resize(utf8size,
'\0');
115 const UTF16* sourcestart =
reinterpret_cast<const UTF16*
>(widestring.c_str());
116 const UTF16* sourceend = sourcestart + widesize;
117 UTF8* targetstart =
reinterpret_cast<UTF8*
>(&resultstring[0]);
118 UTF8* ts = targetstart;
119 UTF8* targetend = targetstart + utf8size;
136 return std::string(resultstring, 0, targetstart - ts);
138 else if (
sizeof(char32_t) == 4)
140 size_t utf8size = 4 * widesize + 1;
141 std::string resultstring;
142 resultstring.resize(utf8size,
'\0');
143 const UTF32* sourcestart =
reinterpret_cast<const UTF32*
>(widestring.c_str());
144 const UTF32* sourceend = sourcestart + widesize;
145 UTF8* targetstart =
reinterpret_cast<UTF8*
>(&resultstring[0]);
146 UTF8* ts = targetstart;
147 UTF8* targetend = targetstart + utf8size;
164 return std::string(resultstring, 0, targetstart - ts);
ConversionResult ConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ConversionFlags flags)
std::string ToUtf8(const std::basic_string< char32_t > &widestring)
std::basic_string< char32_t > FromUtf8(const std::string &utf8string)
ConversionResult ConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ConversionFlags flags)
ConversionResult ConvertUTF32toUTF8(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, ConversionFlags flags)
ConversionResult ConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, ConversionFlags flags)
A character string class.