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-
20+ import codecs
21+ import sys
2122from builtins import range
2223from builtins import object
2324from past .utils import old_div
@@ -28,23 +29,23 @@ class D32( object ):
2829
2930 def __init__ ( self , alphabet ):
3031 super ( D32 , self ).__init__ ( )
31- self .alphabet = bytearray ( alphabet )
32+ self .alphabet = bytearray ( alphabet . encode ( 'utf-8' ) )
3233 self .lookup = bytearray ( 255 )
3334 for i in range ( 32 ):
3435 self .lookup [ self .alphabet [ i ] ] = i
3536
3637 def encode ( self , d ):
3738 """
3839 >>> encode = standard.encode
39- >>> encode('')
40+ >>> encode(b '') # doctest: +ALLOW_UNICODE
4041 ''
41- >>> encode('\\ 0')
42+ >>> encode(b '\\ 0') # doctest: +ALLOW_UNICODE
4243 '22'
43- >>> encode('\\ xff')
44+ >>> encode(b '\\ xff') # doctest: +ALLOW_UNICODE
4445 'zw'
45- >>> encode('\\ 0\\ 1\\ 2\\ 3\\ 4')
46+ >>> encode(b '\\ 0\\ 1\\ 2\\ 3\\ 4') # doctest: +ALLOW_UNICODE
4647 '222k62s6'
47- >>> encode('\\ 0\\ 1\\ 2\\ 3\\ 4\\ 5')
48+ >>> encode(b '\\ 0\\ 1\\ 2\\ 3\\ 4\\ 5') # doctest: +ALLOW_UNICODE
4849 '222k62s62o'
4950 """
5051 m = len ( d )
@@ -56,7 +57,7 @@ def encode( self, d ):
5657
5758 while i < m :
5859 if m - i < 5 :
59- g = bytearray ( d [ i : ] + '\0 ' * (5 - (m - i )) )
60+ g = bytearray ( d [ i : ] + b '\0 ' * (5 - (m - i )))
6061 else :
6162 g = bytearray ( d [ i :i + 5 ] )
6263 # bit 1 2 3
@@ -73,17 +74,18 @@ def encode( self, d ):
7374 e [ j + 7 ] = a [ g [ 4 ] & 31 ]
7475 j += 8
7576 i += 5
76- return str ( e [ :- padding ] )
77+ return codecs . decode ( e [ :- padding ], 'ASCII' )
7778
7879 def decode ( self , e ):
7980 """
81+ >>> import codecs
8082 >>> decode = standard.decode
8183
8284 # >>> decode('222k62s62o')
8385 # '\\ x00\\ x01\\ x02\\ x03\\ x04\\ x05'
8486 # >>> decode('222k62s6')
8587 # '\\ x00\\ x01\\ x02\\ x03\\ x04'
86- >>> decode('zw')
88+ >>> codecs. decode(decode( 'zw'), 'unicode-escape') # # doctest: +ALLOW_UNICODE
8789 '\\ xff'
8890 """
8991 n = len ( e )
@@ -108,7 +110,8 @@ def decode( self, e ):
108110 d [ i + 4 ] = g [ 6 ] << 5 & 255 | g [ 7 ]
109111 j += 8
110112 i += 5
111- return str ( d [ :- padding ] )
113+
114+ return bytes (d [ :- padding ])
112115
113116
114117# A variant of Base64 that maintains the lexicographical ordering such that for any given list of
0 commit comments