3

私はこれをやっています:

word.rstrip(s)

ここで、wordとsは、Unicode文字を含む文字列です。

私はこれを取得しています:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

一部のWindowsDjangoシステムでこのエラーが発生するバグレポートがあります。しかし、私の状況はその場合とは無関係のようです。

何が問題なのですか?


編集:コードは次のようになります:

def Strip(word):
    for s in suffixes:
        return word.rstrip(s)

4

2 に答える 2

4

問題は、それsがバイト文字列であるのに対し、はユニコード文字列であることです。そのため、Python はが意味をなすようにユニコード文字列に変換wordしようとします。問題は、ASCII でエンコードされていることを前提としていますが、明らかにそうではありません (ASCII 範囲外の文字が含まれているため)。srstrips

したがって、リテラルとして初期化するので、そのu前に a を置くことで、非常に簡単に Unicode 文字列に変換できます。

suffixes = [u'ি']

動作します。さらにサフィックスを追加するとu、それらすべての前に個別に必要になります。

于 2012-05-25T12:33:02.963 に答える
3

これは、python2 の暗黙的な変換が原因で発生したと思います。このドキュメントで説明されていますが、python 2 および 3 での unicode の処理に関するプレゼンテーション全体を読むことをお勧めします(および python3 が優れている理由 ;-))

したがって、問題の解決策は、ストライピングの前に文字列を強制的に utf8 としてデコードすることだと思います。

何かのようなもの :

def Strip(word):
    word = word.decode("utf8")
    for s in suffixes:
        return word.rstrip(s.decode("utf8")

2回目の試行:

def Strip(word):
    if type(word) == str:
        word = word.decode("utf8")
    for s in suffixes:
        if type(s) == str:
            s = s.decode("utf8")
        return word.rstrip(s)
于 2012-05-25T12:01:00.497 に答える