29

たとえば、Unicode文字列がある場合、次のようにASCII文字列としてエンコードできます。

>>> u'\u003cfoo/\u003e'.encode('ascii')
'<foo/>'

ただし、たとえば次のASCII文字列があります。

'\u003foo\u003e'

...上記の最初の例と同じASCII文字列に変換したい:

'<foo/>'
4

5 に答える 5

53

これを理解するのにしばらく時間がかかりましたが、このページに最良の答えがありました:

>>> s = '\u003cfoo/\u003e'
>>> s.decode( 'unicode-escape' )
u'<foo/>'
>>> s.decode( 'unicode-escape' ).encode( 'ascii' )
'<foo/>'

Unicode 文字列を指定する別の方法を処理する「raw-unicode-escape」コーデックもあります。詳細については、リンクされたページの「Unicode コンストラクター」セクションを確認してください (私は Unicode に精通していないため)。

編集: Python Standard Encodingsも参照してください。

于 2008-11-06T02:26:05.433 に答える
2

ある時点で、デコードしたい文字列に漢字や顔文字などの特殊文字が含まれている場合、次のようなエラーが発生することがあります。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 109-123: ordinal not in range(128)

私の場合 (twitter データ処理)、次のようにデコードして、すべての文字をエラーなしで表示できるようにしました。

>>> s = '\u003cfoo\u003e'
>>> s.decode( 'unicode-escape' ).encode( 'utf-8' )
>>> <foo>
于 2014-03-29T03:06:42.217 に答える
2

Python 2.5 では、正しいエンコーディングは「unicode-escape」ではなく「unicode_escape」です (アンダースコアに注意してください)。

Python の新しいバージョンが Unicode 名を変更したかどうかはわかりませんが、ここではアンダースコアでのみ機能しました。

とにかく、これです。

于 2009-11-17T18:14:37.327 に答える
1

ネッド・バッチェルダーは次のように述べています。

ひもがどこから来ているかによっては少し危険ですが、次のようにします。

>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'

実際、このメソッドは次のように安全にすることができます:

>>> s = '\u003cfoo\u003e'
>>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1]

三重引用符の文字列と、最後の三重引用符の直前のダッシュに注意してください。

  1. 3 引用符で囲まれた文字列を使用すると、ユーザーが文字列に ' \\" ' (視覚的にわかりやすくするためにスペースを追加) を入力しても、評価者を混乱させないことが保証されます。
  2. 最後のダッシュは、ユーザーの文字列が ' \" ' で終わる場合のフェイルセーフです。結果を割り当てる前に、挿入されたダッシュを [:-1] でスライスします。

したがって、生の形式でキャプチャされている限り、ユーザーが何を入力するかを心配する必要はありません。

于 2012-07-01T12:29:51.557 に答える
0

ひもがどこから来ているかによっては少し危険ですが、次のようにします。

>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'
于 2008-11-06T02:01:12.740 に答える