So talking only about the encoding/writing phase, the conclusion would be - not to escape $/ - escape everything with code points [0,31], using named escapes if they exist, else \uHHHH - escape $\ itself
That leaves the question about $' and $". $' is used in STON as string delimiter, so it has to be escaped. - escape $' Right now, $" is also escaped. Should that remain the case, or only in JSON compatibility mode (where $" is used as string delimiter) ? - do not escape $" In JSON mode, escape $" and not $' then ? When parsing, all named and other escapes are always accepted, as they are now. > On 18 Jan 2017, at 15:25, Peter Uhnak <i.uh...@gmail.com> wrote: > > On Wed, Jan 18, 2017 at 11:11:06AM +0100, Christophe Demarey wrote: >> >>> Le 18 janv. 2017 à 09:51, Sven Van Caekenberghe <s...@stfx.eu> a écrit : >>> >>> Hi Christophe, >>> >>>> STON toString: 'g...@github.com:foo/bar.git’ => >>>> ''g...@github.com:foo\/bar.git’' >>>> It used to be ''g...@github.com:foo/bar.git’’. > >>> In other words, it was an implementation error (omission). Note that JSON >>> also has this escape. > > Yes and no for JSON. > > Only " and \ has to be escaped. Escaping anything else will give it special > meaning with the exception of / which will just produce the same thing, > because it is a special snowflake. :) > > quoted from https://tools.ietf.org/html/rfc7159#section-7: > > - Unicode characters may be placed within the quotation marks, except for the > characters that must be escaped: quotation mark, reverse solidus, and the > control characters (U+0000 through U+001F). > - Alternatively, there are two-character sequence escape representations of > some popular characters. > > "/" (U+002F) doesn't fall into control character range, but the alternative > section does permit it escaping it. > > In other words, JSON strings "\/", and "/", and "\u002f" are equivalent. > > But JSON itself doesn't require you to escape "/" (just like you are not > required to escape "hi" into "\u0068\u0069", although you can). > > Note that other systems do not escape / by default: > > (Pharo) > NeoJSONWriter toString: 'g...@github.com:foo/bar.git' => > "g...@github.com:foo/bar.git" > > (JavaScript) > JSON.stringify('g...@github.com:foo/bar.git') => "g...@github.com:foo/bar.git" > > (Ruby) > require 'json' > puts 'g...@github.com:foo/bar.git'.to_json => "g...@github.com:foo/bar.git" > > Peter >