どうすれば次のようなことができますか?
>>> s = u'hello'
>>> isinstance(s,str)
False
しかし、このUnicodeでエンコードされた文字列に対してisinstance
がTrue
を返すようにしたいと思います。 Unicode文字列オブジェクトタイプはありますか?
Python2の場合、 basestring
を使用してbothをテストできます。
isinstance(unicode_or_bytestring, basestring)
basestring
はPython 2でのみ使用可能であり、 str
と unicode
の両方の抽象基本型です。
justunicode
をテストする場合は、明示的にテストします。
isinstance(unicode_tring, unicode)
Python 3の場合、str
をテストしますのみ:
isinstance(unicode_or_bytestring, str)
または、バイト文字列を処理する必要がある場合は、bytes
を個別にテストします:
isinstance(unicode_or_bytestring, bytes)
2つのタイプは意図的に交換できません。明示的なエンコード(str
からbytes
)とデコード(bytes
からstr
)を使用して、タイプ間で変換します。
Unicode文字列オブジェクトタイプはありますか?
はい、それは呼ばれます unicode
:
>>> s = u'hello'
>>> isinstance(s, unicode)
True
>>>
Python 3.xでは、 すべての文字列がUnicodeになりました であるため、このタイプは削除されていることに注意してください。
Unicode文字列オブジェクトタイプはありますか?
はい、これは機能します:
>>> s = u'hello'
>>> isinstance(s, unicode)
True
>>>
ただし、これは、Unicodeであることがわかっている場合にのみ役立ちます。別の解決策は、 six
パッケージを使用することです。これにより、python2.xおよびpython3.xの変換が不要になり、unicode
および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