web-dev-qa-db-ja.com

Unicodeエスケープシーケンスをpython文字列のUnicode文字に変換する方法

「unicode(head.contents [3])」を使用してタグのコンテンツを取得しようとすると、「Christensen Sk\xf6ld」のような出力が表示されます。エスケープシーケンスを文字列として返したい。 Pythonでそれを行う方法?

27
Vicky

Pythonが名前を通常の文字列と見なすと仮定すると、最初にそれをユニコードにデコードする必要があります:

>>> name
'Christensen Sk\xf6ld'
>>> unicode(name, 'latin-1')
u'Christensen Sk\xf6ld'

これを達成する別の方法:

>>> name.decode('latin-1')
u'Christensen Sk\xf6ld'

文字列の前の "u"に注意してください。これは、コード化されていないことを示します。これを印刷すると、アクセント付きの文字が適切に表示されます。

>>> print name.decode('latin-1')
Christensen Sköld

ところで:必要に応じて、de "encode"メソッドを使用して、Unicodeを次のように変換できます。 UTF-8文字列:

>>> name.decode('latin-1').encode('utf-8')
'Christensen Sk\xc3\xb6ld'
29
Mark van Lent

Unicodeエスケープ付きのバイト文字列が__b"\N{SNOWMAN}"_であるとすると、b"\N{SNOWMAN}".decode('unicode-escape)は期待されるUnicode文字列_u'\u2603'_を生成します。

8
joeforker

私はそれが実際に正しく機能していると思います。デフォルトでは、Pythonは文字列をASCIIエンコーディングで表示します。これは、すべての端末がUnicodeをサポートしているわけではないためです。ただし、実際に文字列を印刷する場合は、機能するはずです。次の例:

>>> u'\xcfa'
u'\xcfa'
>>> print u'\xcfa'
Ïa
7
BJ Homer