28#ifndef UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9
29#define UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9
35 inline std::string
utf16to8(std::u16string_view s)
38 utf16to8(s.begin(), s.end(), std::back_inserter(result));
42 inline std::u16string
utf8to16(std::string_view s)
44 std::u16string result;
45 utf8to16(s.begin(), s.end(), std::back_inserter(result));
49 inline std::string
utf32to8(std::u32string_view s)
52 utf32to8(s.begin(), s.end(), std::back_inserter(result));
56 inline std::u32string
utf8to32(std::string_view s)
58 std::u32string result;
59 utf8to32(s.begin(), s.end(), std::back_inserter(result));
65 std::string_view::const_iterator invalid =
find_invalid(s.begin(), s.end());
66 return (invalid == s.end()) ? std::string_view::npos :
static_cast<std::size_t
>(invalid - s.begin());
77 replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement);
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)
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)
output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement)