Use isinstance to test for Unicode string Use isinstance to test for Unicode string python python

Use isinstance to test for Unicode string


For Python2, you can 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)

For Python 3, test for str only:

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 to bytes) and decoding (bytes to str) to convert between the types.


Is there a Unicode string object type?

Yes, it is called unicode:

>>> s = u'hello'>>> isinstance(s, unicode)True>>>

Note that in Python 3.x, this type was removed because all strings are now Unicode.


Is there a Unicode string object type?

Yes this works:

>>> s = u'hello'>>> isinstance(s, unicode)True>>>

This is however only useful if you know that it is unicode.Another solution is to use the six package, which saves you from python2.x and python3.x conversions and catches unicode and str

>>> unicode_s = u'hello'>>> s = 'hello'>>> isinstance(unicode_s, str)False>>> isinstance(unicode_s, unicode)True>>> isinstance(s, str)True>>> isinstance(unicode_s, str)False>>> isinstance(s, six.string_types)True>>> isinstance(unicode_s, six.string_types)True