docs: def _translate(unistr, table):
      '''Replace characters using a table.'''
      if type(unistr) is str:
          try:
              unistr = unistr.decode('utf-8')
          # Python 3 returns AttributeError when .decode() is called on a str
          # This means it is already unicode.
          except AttributeError:
              pass
      try:
          if type(unistr) is not unicode:
              return unistr
      # Python 3 returns NameError because unicode is not a type.
      except NameError:
          pass
  
      chars = []
      for c in unistr:
          replacement = table.get(c)
          chars.append(replacement if replacement else c)
      return u''.join(chars)