[Python-Dev] Why can't I encode/decode base64 without importing a module?

R. David Murray rdmurray at bitdance.com
Tue Apr 23 20:05:20 CEST 2013


On Wed, 24 Apr 2013 01:49:39 +0900, "Stephen J. Turnbull" <stephen at xemacs.org> wrote:
> R. David Murray writes:
>  > On Tue, 23 Apr 2013 22:29:33 +0900, "Stephen J. Turnbull" <stephen at xemacs.org> wrote:
>  > > R. David Murray writes:
>  > > 
>  > >  > You transform *into* the encoding, and untransform *out* of the
>  > >  > encoding.  Do you have an example where that would be ambiguous?
>  > > 
>  > > In the bytes-to-bytes case, any pair of character encodings (eg, UTF-8
>  > > and ISO-8859-15) would do.  Or how about in text, ReST to HTML?
>  > 
>  > If I write:
>  > 
>  >   bytestring.transform('ISO-8859-15')
>  > 
>  > that would indeed be ambiguous, but only because I haven't named the
>  > source encoding of the bytestring.  So the above is obviously
>  > nonsense, and the easiest "fix" is to have the things that are currently
>  > bytes-to-text or text-to-bytes character set transformations *only*
>  > work with encode/decode, and not transform/untransform.
> 
> I think you're completely missing my point here.  The problem is that
> in the cases I mention, what is encoded data and what is decoded data
> can only be decided by asking the user.

I think I understood that.  I don't understand why that's a problem.
(But see below.)

>  > Given this, the possible valid transformations would be:
>  > 
>  >   bytestring.transform('base64')
>  >   bytesstring.untransform('base64')
>  >   string.untransform('base64')
> 
> Which is an obnoxious API, since (1) you've now made it impossible to
> use "transform" for
> 
>     bytestring.transform(from='utf-8', to='iso-8859-1')
>     bytestring.transform(from='ulaw', to='mp3')
>     textstring.transform(from='rest', to='html')
> 
> without confusion, and (2) the whole world is going to wonder why you
> don't use .encode and .decode instead of .transform and .untransform.

I've been trying to explain what I thought the transform/untransform
proposal was: a minimalist extension of the encode/decode semantic
(under a different name) so that functionality that was lost from
Python2 encode/decode could be restored to Python3 in a reasonably
understandable way.  This would be a *limited* convenience function,
just as encode/decode are limited convenience functions with respect to
the full power of the codecs module.

I myself don't have any real investment in the proposal, or I would
have long since tried to push the tracker issue forward.

People (at least you and Nick, and maybe Guido) seem to be more interested
in a more general/powerful mechanism.  I'm fine with that :)

--David


More information about the Python-Dev mailing list