Pythonの文字列をunicodeに変換

unicodeの文字を含む文字列があります(例:`u2026など)。なぜか、unicodeではなく、strとして受信されます。どうすればunicodeに戻せますか?

>>> a="Hello\u2026"
>>> b=u"Hello\u2026"
>>> print a
Hello\u2026
>>> print b
Hello…
>>> print unicode(a)
Hello\u2026
>>> 

ですから、明らかに unicode(a) は答えになりません。では、何でしょうか?

ソリューション

ユニコードのエスケープは、ユニコードの文字列でしか機能しないので、この

 a="\u2026"

は、実際には次の6文字からなる文字列です。

これをunicodeにするには、decode('unicode-escape')を使います。

a="\u2026"
print repr(a)
print repr(a.decode('unicode-escape'))

## '\\u2026'
## u'\u2026'
解説 (0)

unicode-escape` コーデックでデコードします。

>>> a="Hello\u2026"
>>> a.decode('unicode-escape')
u'Hello\u2026'
>>> print _
Hello…

これは、非ユニコード文字列の場合、`u2026は認識されず、代わりにリテラルな一連の文字として扱われるからです (より明確に言えば、'Hello\u2026')。エスケープをデコードする必要がありますが、unicode-escape コーデックがこれを行います。

コーデックの引数を指定することで、unicodeにも同じように認識させることができることに注意してください。

>>> unicode(a, 'unicode-escape')
u'Hello\u2026'

しかし、a.decode()の方法の方が素敵です。

解説 (0)
>>> a="Hello\u2026"
>>> print a.decode('unicode-escape')
Hello…
解説 (0)