web-dev-qa-db-ja.com

isinstanceを使用してUnicode文字列をテストします

どうすれば次のようなことができますか?

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

しかし、このUnicodeでエンコードされた文字列に対してisinstanceTrueを返すようにしたいと思います。 Unicode文字列オブジェクトタイプはありますか?

14
A.D

Python2の場合、 basestring を使用してbothをテストできます。

isinstance(unicode_or_bytestring, basestring)

basestringはPython 2でのみ使用可能であり、 strunicode の両方の抽象基本型です。

justunicodeをテストする場合は、明示的にテストします。

isinstance(unicode_tring, unicode)

Python 3の場合、strをテストしますのみ

isinstance(unicode_or_bytestring, str)

または、バイト文字列を処理する必要がある場合は、bytesを個別にテストします

isinstance(unicode_or_bytestring, bytes)

2つのタイプは意図的に交換できません。明示的なエンコード(strからbytes)とデコード(bytesからstr)を使用して、タイプ間で変換します。

20
Martijn Pieters

Unicode文字列オブジェクトタイプはありますか?

はい、それは呼ばれます unicode

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

Python 3.xでは、 すべての文字列がUnicodeになりました であるため、このタイプは削除されていることに注意してください。

7
user2555451

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
2
eleijonmarck