web-dev-qa-db-ja.com

Python文字列からUnicode

可能性のある複製:
PythonでASCII文字列をUnicodeとして扱い、エスケープされた文字をエスケープ解除するにはどうすればよいですか?
python文字列でUnicodeエスケープシーケンスをUnicode文字に変換する方法

私はユニコード文字を含む文字列を持っています\u2026など。どういうわけか、それはunicodeとして受信されませんが、strとして受信されます。ユニコードに戻すにはどうすればよいですか?

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

したがって、明らかにunicode(a)は答えではありません。それでは何ですか?

53
prongs

UnicodeエスケープはUnicode文字列でのみ機能するため、これは

 a="\u2026"

実際には6文字の文字列です: '\'、 'u'、 '2'、 '0'、 '2'、 '6'。

これからユニコードを作成するには、decode('unicode-escape')を使用します。

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

## '\\u2026'
## u'\u2026'
75
georg

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

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

これは、Unicode以外の文字列では\u2026が認識されず、代わりにリテラルの一連の文字として処理されるためです(より明確に言うと、'Hello\\u2026')。エスケープをデコードする必要がありますが、unicode-escapeコーデックでそれを行うことができます。

Codec引数を指定することで、unicodeを取得して同じ方法で認識できることに注意してください。

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

しかし、a.decode()の方法の方が優れています。

26
Chris Morgan
>>> a="Hello\u2026"
>>> print a.decode('unicode-escape')
Hello…
16
jamylak