0

これは私の最初の投稿なので、これが間違ったトピックか何かに関係していないことを願っていますが、私が書いている Python アプリでやや珍しい問題に遭遇しました。

基本的に、私がやろうとしているのは、テキスト ファイルから読み取り、その一部を Tkinter テキスト ウィジェットに挿入することです。テキスト ファイルには通常の "\n" 改行が含まれていますが、コードを実行すると、次のような奇妙なエラーが表示され、回避策を見つけることができませんでした。

(ところで、ここでお粗末な設定で申し訳ありません...この新しいコード入力システムの操作方法がわかりません。「独自のルールでプレイ」し、独自の構文を持っているようです。そのため、以下にコピーして貼り付けました:

    Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python33\lib\idlelib\run.py", line 107, in main
    seq, request = rpc.request_queue.get(block=True, timeout=0.05)
  File "C:\Python33\lib\queue.py", line 175, in get
    raise Empty
queue.Empty

上記の例外の処理中に、別の例外が発生しました:

Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__
    return self.func(*args)
  File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 89, in search
    results.create()
  File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 31, in create
    joke = linecache.getline('Jokes/jokelist.txt',x)
  File "C:\Python33\lib\linecache.py", line 15, in getline
    lines = getlines(filename, module_globals)
  File "C:\Python33\lib\linecache.py", line 41, in getlines
    return updatecache(filename, module_globals)
  File "C:\Python33\lib\linecache.py", line 127, in updatecache
    lines = fp.readlines()
  File "C:\Python33\lib\codecs.py", line 300, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 627: invalid start byte

そのため、問題を引き起こした関数 (ループで使用される "linecache.getline" だけfor) は、テキストに "\" がない場合は完全に機能しますが、何らかの理由で "\" が気に入らず、開始します吐き出すエラー。: /

だから今夜、私は「ドキュメント」(http://docs.python.org/3/howto/unicode.html)に1時間近く費やし、ユニコードのすべての歴史と基本概念を読んだ。概念のみのレベルでは有益で役に立ちましたが、実用的な情報と潜在的な解決策に関してはあまり役に立たないようでした.

この厄介な小さなバグを打ち負かすために思いつく唯一の解決策は、代わりに「/n」を使用し、プログラムで文字列を配列(またはPythonで呼び出されるように「リスト」)に分割してから、ループを使用することです複数の行に分割するには...しかし、特に一般的な回避策が既に存在する場合、それは多くの不要な手順のように聞こえます. したがって、この特に不思議な問題を解決する方法についての洞察をいただければ幸いです。

ありがとう。

4

1 に答える 1

0

UTF-8 デコーダーに渡されたデータは UTF-8 ではありません。そのため、エラーが発生します。何が起こっているのかを正確に説明するために、失敗したコードといくつかのデータ例を提供する必要があります。

問題の文字は、Latin-1 および CP-1252 では「¿」です。おそらく、これは Windows マシンで書かれたスペイン語のテキストですか? その場合は、ファイルを開くときにエンコーディングを指定してください。

于 2013-05-21T04:54:36.270 に答える