base64.encodestring failing in python 3

Vinay Pai picture Vinay Pai · Jun 30, 2015 · Viewed 17.3k times · Source

The following piece of code runs successfully on a python 2 machine:

base64_str = base64.encodestring('%s:%s' % (username,password)).replace('\n', '')

I am trying to port it over to Python 3 but when I do so I encounter the following error:

>>> a = base64.encodestring('{0}:{1}'.format(username,password)).replace('\n','')
Traceback (most recent call last):
  File "/auto/pysw/cel55/python/3.4.1/lib/python3.4/base64.py", line 519, in _input_type_check
    m = memoryview(s)
TypeError: memoryview: str object does not have the buffer interface

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/auto/pysw/cel55/python/3.4.1/lib/python3.4/base64.py", line 548, in encodestring
    return encodebytes(s)
  File "/auto/pysw/cel55/python/3.4.1/lib/python3.4/base64.py", line 536, in encodebytes
    _input_type_check(s)
  File "/auto/pysw/cel55/python/3.4.1/lib/python3.4/base64.py", line 522, in _input_type_check
    raise TypeError(msg) from err
TypeError: expected bytes-like object, not str

I tried searching examples for encodestring usage but not able to find a good document. Am I missing something obvious? I am running this on RHEL 2.6.18-371.11.1.el5

Answer

Anand S Kumar picture Anand S Kumar · Jun 30, 2015

You can encode() the string (to convert it to byte string) , before passing it into base64.encodestring . Example -

base64_str = base64.encodestring(('%s:%s' % (username,password)).encode()).decode().strip()