Skip to content
Advertisement

Use isinstance to test for Unicode string

How can I do something like:

>>> s = u'hello'
>>> isinstance(s,str)
False

But I would like isinstance to return True for this Unicode encoded string. Is there a Unicode string object type?

Advertisement

Answer

Test for str:

isinstance(unicode_or_bytestring, str)

or, if you must handle bytestrings, test for bytes separately:

isinstance(unicode_or_bytestring, bytes)

The two types are deliberately not exchangible; use explicit encoding (for str -> bytes) and decoding (bytes -> str) to convert between the types.

In Python 2, where the modern Python 3 str type is called unicode and str is the precursor of the Python 3 bytes type, you could use basestring to test for both:

isinstance(unicode_or_bytestring, basestring)

basestring is only available in Python 2, and is the abstract base type of both str and unicode.

If you wanted to test for just unicode, then do so explicitly:

isinstance(unicode_tring, unicode)
Advertisement