1717# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1818
1919# Inspired by Dominic Tarr's JavaScript at https://github.com/dominictarr/d64
20-
21- from builtins import str
20+ import codecs
21+ import sys
2222from builtins import range
2323from builtins import object
2424from past .utils import old_div
@@ -29,23 +29,23 @@ class D32( object ):
2929
3030 def __init__ ( self , alphabet ):
3131 super ( D32 , self ).__init__ ( )
32- self .alphabet = bytearray ( alphabet )
32+ self .alphabet = bytearray ( alphabet . encode ( 'utf-8' ) )
3333 self .lookup = bytearray ( 255 )
3434 for i in range ( 32 ):
3535 self .lookup [ self .alphabet [ i ] ] = i
3636
3737 def encode ( self , d ):
3838 """
3939 >>> encode = standard.encode
40- >>> encode('')
40+ >>> encode(b '') # doctest: +ALLOW_UNICODE
4141 ''
42- >>> encode('\\ 0')
42+ >>> encode(b '\\ 0') # doctest: +ALLOW_UNICODE
4343 '22'
44- >>> encode('\\ xff')
44+ >>> encode(b '\\ xff') # doctest: +ALLOW_UNICODE
4545 'zw'
46- >>> encode('\\ 0\\ 1\\ 2\\ 3\\ 4')
46+ >>> encode(b '\\ 0\\ 1\\ 2\\ 3\\ 4') # doctest: +ALLOW_UNICODE
4747 '222k62s6'
48- >>> encode('\\ 0\\ 1\\ 2\\ 3\\ 4\\ 5')
48+ >>> encode(b '\\ 0\\ 1\\ 2\\ 3\\ 4\\ 5') # doctest: +ALLOW_UNICODE
4949 '222k62s62o'
5050 """
5151 m = len ( d )
@@ -57,7 +57,7 @@ def encode( self, d ):
5757
5858 while i < m :
5959 if m - i < 5 :
60- g = bytearray ( d [ i : ] + '\0 ' * (5 - (m - i )) )
60+ g = bytearray ( d [ i : ] + b '\0 ' * (5 - (m - i )))
6161 else :
6262 g = bytearray ( d [ i :i + 5 ] )
6363 # bit 1 2 3
@@ -74,17 +74,18 @@ def encode( self, d ):
7474 e [ j + 7 ] = a [ g [ 4 ] & 31 ]
7575 j += 8
7676 i += 5
77- return str ( e [ :- padding ] )
77+ return codecs . decode ( e [ :- padding ], 'ASCII' )
7878
7979 def decode ( self , e ):
8080 """
81+ >>> import codecs
8182 >>> decode = standard.decode
8283
8384 # >>> decode('222k62s62o')
8485 # '\\ x00\\ x01\\ x02\\ x03\\ x04\\ x05'
8586 # >>> decode('222k62s6')
8687 # '\\ x00\\ x01\\ x02\\ x03\\ x04'
87- >>> decode('zw')
88+ >>> codecs. decode(decode( 'zw'), 'unicode-escape') # # doctest: +ALLOW_UNICODE
8889 '\\ xff'
8990 """
9091 n = len ( e )
@@ -109,7 +110,8 @@ def decode( self, e ):
109110 d [ i + 4 ] = g [ 6 ] << 5 & 255 | g [ 7 ]
110111 j += 8
111112 i += 5
112- return bytes ( d [ :- padding ] )
113+
114+ return bytes (d [ :- padding ])
113115
114116
115117# A variant of Base64 that maintains the lexicographical ordering such that for any given list of
0 commit comments