28#ifndef UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9
29#define UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9
35 inline std::u8string
utf16tou8(
const std::u16string& s)
38 utf16to8(s.begin(), s.end(), std::back_inserter(result));
42 inline std::u8string
utf16tou8(std::u16string_view s)
45 utf16to8(s.begin(), s.end(), std::back_inserter(result));
49 inline std::u16string
utf8to16(
const std::u8string& s)
51 std::u16string result;
52 utf8to16(s.begin(), s.end(), std::back_inserter(result));
56 inline std::u16string
utf8to16(
const std::u8string_view& s)
58 std::u16string result;
59 utf8to16(s.begin(), s.end(), std::back_inserter(result));
63 inline std::u8string
utf32tou8(
const std::u32string& s)
66 utf32to8(s.begin(), s.end(), std::back_inserter(result));
70 inline std::u8string
utf32tou8(
const std::u32string_view& s)
73 utf32to8(s.begin(), s.end(), std::back_inserter(result));
77 inline std::u32string
utf8to32(
const std::u8string& s)
79 std::u32string result;
80 utf8to32(s.begin(), s.end(), std::back_inserter(result));
84 inline std::u32string
utf8to32(
const std::u8string_view& s)
86 std::u32string result;
87 utf8to32(s.begin(), s.end(), std::back_inserter(result));
93 std::u8string::const_iterator invalid =
find_invalid(s.begin(), s.end());
94 return (invalid == s.end()) ? std::string_view::npos :
static_cast<std::size_t
>(invalid - s.begin());
104 std::u8string result;
105 replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement);
111 std::u8string result;
bool starts_with_bom(octet_iterator it, octet_iterator end)
octet_iterator utf32to8(u32bit_iterator start, u32bit_iterator end, octet_iterator result)
u16bit_iterator utf8to16(octet_iterator start, octet_iterator end, u16bit_iterator result)
u32bit_iterator utf8to32(octet_iterator start, octet_iterator end, u32bit_iterator result)
std::u8string utf32tou8(const std::u32string &s)
octet_iterator utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result)
bool is_valid(octet_iterator start, octet_iterator end)
octet_iterator find_invalid(octet_iterator start, octet_iterator end)
std::u8string utf16tou8(const std::u16string &s)
output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement)