On Wed, Sep 16, 2020, 5:18 PM Christopher Barker <python...@gmail.com> wrote:
> On Tue, Sep 15, 2020 at 5:26 PM Wes Turner <wes.tur...@gmail.com> wrote: > >> On Tue, Sep 15, 2020 at 9:09 AM Wes Turner <wes.tur...@gmail.com> wrote: >> >>> json.load and json.dump already default to UTF8 and already have >>>> parameters for json loading and dumping. >>>> >>> > so it turns out that loads(), which optionally takes a bytes or bytesarray > object tries to determine whether the encoding is UTF-6, UTF-!6 or utf-32 > (the ones allowed by the standard) (thanks Guido for the pointer). And > load() calls loads(), so it should work with binary mode files as well. > > Currently, dump() simply uses the fp passed in, and it doesn't support > binary files, so it'll use the encoding the user set (or the default, if > not set, which is an issue here) dumps() returns a string, so no encoding > there. > So I was not correct: dump does not default to UTF-8 (and does not accept an encoding= parameter) > I think dumpf() should use UTF-8, and that's it. If anyone really wants > something else, they can get it by providing an open text file object. > Why would we impose UTF-8 when the spec says UTF-8, UTF-16, or UTF-32? How could this be improved? (I'm on my phone, so) def dumpf(obj, path, *args, **kwargs): with open(getattr(path, '__path__', path), 'w', encoding=kwargs.get('encoding', 'utf8')) as _file: return dump(_file, *args, **kwargs) def loadf(obj, path, *args, **kwargs): with open(getattr(path, '__path__', path), encoding=kwargs.get('encoding', 'utf8')) as _file: return load(_file, *args, **kwargs) > loads(), on the other hand, is a bit tricky -- it could allow only UTF-8, > but it seems it would be more consistent (and easy to do) to open the file > in binary mode and use the existing code to determine the encoding. > > -CHB > > >> The Python JSON implementation should support the full JSON spec > (including UTF-8, UTF-16, and UTF-32) and should default to UTF-8. > > 'turns out it does already, and no one is suggesting changing that. > > Anyway -- if anyone wants to push for overloading .load()/dump(), rather >>> than making two new loadf() and dumpf() functions, then speak now -- that >>> will take more discussion, and maybe a PEP. >>> >> >> I don't see why one or the other would need a PEP so long as the new >> functionality is backward-compatible? >> > > iIm just putting my finger in the wind. no need for a PEP if it's simeel > and non-controversial, but if even the few folks on this thread don't agree > on the API we want, then it's maybe too controversial -- so either more > discussion, to come to consensus, or a PEP. > > Or not -- we can see what the core devs say if/when someone does a bpo / > PR. > > -CHB > > > > > >> >> >>> -CHB >>> >>> >>> >>> -- >>> Christopher Barker, PhD >>> >>> Python Language Consulting >>> - Teaching >>> - Scientific Software Development >>> - Desktop GUI and Web Development >>> - wxPython, numpy, scipy, Cython >>> >> > > -- > Christopher Barker, PhD > > Python Language Consulting > - Teaching > - Scientific Software Development > - Desktop GUI and Web Development > - wxPython, numpy, scipy, Cython >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/JAIJVMUQW37S63UFZJSWH5S6BSRBWK6F/ Code of Conduct: http://python.org/psf/codeofconduct/