This seems odd - why check for Unicode or Bytes if you're only going to accept unicode further down?