30 const unsigned char c =
static_cast<unsigned char>(
s[
i]);
32 if (
c < 0x80)
return 1;
35 unsigned char lo = 0x80,
hi = 0xBF;
36 if (
c >= 0xC2 &&
c <= 0xDF) {
38 }
else if (
c == 0xE0) {
41 }
else if ((
c >= 0xE1 &&
c <= 0xEC) ||
c == 0xEE ||
c == 0xEF) {
43 }
else if (
c == 0xED) {
46 }
else if (
c == 0xF0) {
49 }
else if (
c >= 0xF1 &&
c <= 0xF3) {
51 }
else if (
c == 0xF4) {
58 const size_t n =
s.size();
65 const unsigned char d =
static_cast<unsigned char>(
s[
i +
j]);
66 if (d < (
j == 1 ?
lo : 0x80) || d > (
j == 1 ?
hi : 0xBF)) {
75 const char rep[] = {
static_cast<char>(0xEF),
static_cast<char>(0xBF),
static_cast<char>(0xBD)};
77 out.reserve(
s.size());
78 const size_t n =
s.size();
84 out.append(
s,
i, len);
96 const size_t n =
s.size();
117 static const char*
ws =
" \t\n\v\f\r";
119 if (
first == std::string::npos)
return std::string();
138 Json a = Json::array();
143 Json o = Json::object();
156 }
catch (
const typename Json::type_error&) {
std::string next(const std::string &full, bool end)
Json utf8_valid_json(const Json &j)
size_t utf8_settled(const std::string &s, size_t from)
size_t utf8_part(const std::string &s, size_t i, Utf8Part &part)
std::string dump_valid(const Json &j)
std::string utf8_valid(const std::string &s)