1

Python で非 ASCII コード char を処理するのは本当に混乱します。誰でも説明できますか?

プレーン テキスト ファイルを読み取って、アルファベット以外のすべての文字をスペースに置き換えようとしています。

私はキャラクターのリストを持っています:

ignorelist = ('!', '-', '_', '(', ')', ',', '.', ':', ';', '"', '\'', '?', '#', '@', '$', '^', '&', '*', '+', '=', '{', '}', '[', ']', '\\', '|', '<', '>', '/', u'—')

取得したトークンごとに、そのトークン内の文字をスペースに置き換えて呼び出します

    for punc in ignorelist:
        token = token.replace(punc, ' ')

の末尾に非ASCIIコード文字があることに注意してignorelistください:u'—'

コードがその文字に遭遇するたびに、クラッシュして次のように言います。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position

ファイルの先頭に追加してエンコーディングを宣言しようとしました# -*- coding: utf-8 -*-が、まだ機能していません。誰かが理由を知っていますか?ありがとう!

4

2 に答える 2

4

ファイル入力が utf-8 ではありません。したがって、そのユニコード文字をヒットすると、入力が ascii として表示されるため、比較時に入力バーフが表示されます。

代わりにこれでファイルを読んでみてください。

import codecs
f = codecs.open("test", "r", "utf-8")
于 2013-04-01T03:08:23.323 に答える
2

Python 2.x を使用していて、unicodes とプレーンなstrs を自動変換しようとしますが、ASCII 以外の文字で失敗することがよくあります。

unicodes とs を混ぜてはいけませんstr。sに固執することもできますunicode:

ignorelist = (u'!', u'-', u'_', u'(', u')', u',', u'.', u':', u';', u'"', u'\'', u'?', u'#', u'@', u'$', u'^', u'&', u'*', u'+', u'=', u'{', u'}', u'[', u']', u'\\', u'|', u'<', u'>', u'/', u'—')

if not isinstance(token, unicode):
    token = token.decode('utf-8') # assumes you are using UTF-8
for punc in ignorelist:
    token = token.replace(punc, u' ')

またはプレーンなstrs のみを使用します(最後のものに注意してください):

ignorelist = ('!', '-', '_', '(', ')', ',', '.', ':', ';', '"', '\'', '?', '#', '@', '$', '^', '&', '*', '+', '=', '{', '}', '[', ']', '\\', '|', '<', '>', '/', u'—'.encode('utf-8'))
# and other parts do not need to change

を手動で にエンコードすることによりu'—'strPython はそれ自体を試す必要がなくなります。

unicodeこの種のエラーを避けるために、プログラム全体で使用することをお勧めします。ただし、面倒な場合は、後者の方法を使用できます。ただし、標準ライブラリまたはサードパーティ モジュールで一部の関数を呼び出す場合は注意してください。

# -*- coding: utf-8 -*-コードがUTF-8で書かれていることをPythonに伝えるだけです(またはSyntaxError.

于 2013-04-01T03:08:03.213 に答える