authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-25 21:08:56 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-25 21:08:56 -07:00
log0de5849e8a29aeaf9d9a45d9a4cab14dfed5f1ac
treec81c16a717c20316abf90298fecf47db90c30915
parent64efd2e04fd7bdd9f4b62383ad3668596dfad15a
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

stringify: handle unicode strings


1 files changed, 14 insertions(+), 14 deletions(-)

json.zig+14-14
......@@ -743,17 +743,13 @@ pub fn stringify(writer: anytype, value: anytype, options: std.json.Stringify.Op
743743 try writer.writeAll("\"");
744744 }
745745 } else {
746 return error.Unexpected;
747 }
748 return;
749 }
750 if (comptime extras.isArrayOf(u8)(T)) {
751 if (extras.matchesAll(u8, &value, std.ascii.isAscii)) {
752 if (extras.matchesAll(u8, &value, std.ascii.isPrint)) {
753 try writer.writevAll(&.{ &.{'"'}, &value, &.{'"'} });
754 } else {
755 try writer.writeAll("\"");
756 for (&value) |c| {
746 var view = std.unicode.Utf8View.init(value) catch return error.Unexpected;
747 var iter = view.iterator();
748 try writer.writeAll("\"");
749 while (iter.nextCodepointSlice()) |sl| {
750 const cp = std.unicode.utf8Decode(sl) catch unreachable;
751 if (cp < 128) {
752 const c: u8 = @intCast(cp);
757753 try writer.writeAll(switch (c) {
758754 0x08 => "\\b",
759755 0x09 => "\\t",
......@@ -765,14 +761,18 @@ pub fn stringify(writer: anytype, value: anytype, options: std.json.Stringify.Op
765761 0x23...0x7e => &.{c},
766762 else => "\\u00" ++ extras.to_hex([_]u8{c}),
767763 });
764 continue;
768765 }
769 try writer.writeAll("\"");
766 try writer.writeAll(sl);
770767 }
771 } else {
772 return error.Unexpected;
768 try writer.writeAll("\"");
769 return;
773770 }
774771 return;
775772 }
773 if (comptime extras.isArrayOf(u8)(T)) {
774 return stringify(writer, &value, options);
775 }
776776 if (comptime extras.isSlice(T)) {
777777 try writer.writeAll("[");
778778 for (value, 0..) |item, i| {