Not quite, The result of all the encoders is a str (this was one of the assumptions I made based on looking at the code) type, under python 2 this would be ascii (or utf8 encoded) and python 3 a unicode string.  So I had to specify an encoder that will return the correct string. 

With python 3 using the unicode encoder on a text_type (or it's native str) will return a bytes object.