bprintf(fb, "\\u%04x", u);
}
}
- else if (u >= 0x007f && (js->format_options & JSON_FORMAT_ESCAPE_NONASCII))
+ else if (u < 0x7f)
+ bputc(fb, u);
+ else if (u >= 0x110000 || u >= 0xd800 && u <= 0xdfff)
+ bprintf(fb, "\\u%04x", UNI_REPLACEMENT);
+ else if (js->format_options & JSON_FORMAT_ESCAPE_NONASCII)
{
if (u < 0x10000)
bprintf(fb, "\\u%04x", u);
- else if (u < 0x110000)
- bprintf(fb, "\\u%04x\\u%04x", 0xd800 + ((u - 0x10000) >> 10), 0xdc00 + (u & 0x3ff));
else
- bprintf(fb, "\\u%04x", UNI_REPLACEMENT);
+ bprintf(fb, "\\u%04x\\u%04x", 0xd800 + ((u - 0x10000) >> 10), 0xdc00 + (u & 0x3ff));
}
else
bput_utf8_32(fb, u);