[Python-3000] base64 - bytes and strings

Ron Adam rrr at ronadam.com
Mon Jul 30 04:54:04 CEST 2007



Greg Ewing wrote:
> Nick Coghlan wrote:
>> Py3k strings are unicode, so returning a string would mean you just have 
>> to encode it again using the ascii codec to get the bytes to put on the 
>> wire.
> 
> I still believe that producing a string is conceptually
> the right thing to do. The point of base64 is to encode
> binary data as text, not binary data as binary data.
> 
> If I ever had a reason to use base64, it would be because
> I had a "wire" that would accept text but not binary data,
> e.g. a file open in text mode, or some other text that I
> wanted to embed it in. Getting bytes in that situation
> would force me to make an *extra* conversion.

Not extra, you just need to make sure your binary data is in the correct 
range of values the text device you are sending to can handle.  As long as 
it is, it should just work.  That is the primary purpose of the base64 
encoding.  Keep in mind you are sending byte "characters", not integers.

So it would work like the following I think, with the application having 
responsibility of doing the object to bytes conversion and back, instead of 
the base64 encoder being limited to only strings.

   OUTPUT:
     convert object to bytes -> encode_64 to bytes -> bytes to output

   INPUT:
     bytes from input* -> decode_64 to bytes -> convert bytes to object

     *Reads text "characters" into bytes instance.

By refusing to guess what the object is, we also create an opportunity to 
manipulate the results or source further in a bytes instance without doing 
multiple (or needless) conversions to and from strings.

Cheers,
    Ron









More information about the Python-3000 mailing list