0

私の目標は、ユーザーが問題を提示され、入力を通じてそれを解決することによって聖書の一節を学習できるプログラムを作成することです (例: "Quote vers Gen 3:15")。私が協力しなければならない聖書の翻訳はドイツ語であるため、適切に表示されない大量のウムラウトが含まれています。

私の PyGame ファイルのヘッダー:

#!/usr/bin/python
# -*- coding: utf-8 -*-

後で、3 つのドイツ語のウムラウトをリストします。

u'ö'.encode('utf-8')
u'ä'.encode('utf-8')
u'ü'.encode('utf-8')

txt ファイルはこの関数によって解析されます: def load_list(listname):

fullname = os.path.join("daten", listname + ".txt")
with codecs.open(fullname, "r", "utf-8-sig") as name:
    lines = name.readlines()
for x in range(0, len(lines)):
    lines[x] = lines[x].strip("\n")
    lines[x] = lines[x].strip("\r")
print lines

2 つの行を strip-commands と組み合わせることができることは承知していますが、それはここでのトピックではありません。

PyGame でテキスト ファイルのウムラウトを正しく表示し、ユーザー入力のウムラウトも正しく表示するにはどうすればよいですか? 何百もの提案をチェックしましたが、ここで実際に機能するものは何も得られません。

私が正気を失う前に、どんな助けも大歓迎です(まあ、私はここに座ってゲームをコーディングしているので、とにかくすでにやったでしょう:D)

4

1 に答える 1

1

私は要約しようとします:

  • 文字列または Unicode opject 以外のものを出力すると、そのオブジェクトの__repr__()メソッドがトリガーされます。シーケンスの場合、これは含まれている要素にも適用され、ASCII 以外の文字は\xXX(または\uXXXX) 表記でエスケープされます。と の違いに注意してくださいprint 'text':print ['text']後者の場合、文字列の引用符も出力されます (もちろん括弧以外に)。str.join()出力の外観を制御するために、文字列のリストを連結するために使用します。
  • 入力を常に明示的にデコードし (を使用して行うようにcodecs)、出力をエンコードすることをお勧めします (これは、質問のコード スニペットでは行われません)。
  • ソース ファイルのエンコーディング (# coding: utf8ヘッダーの行) は、入力と出力のエンコーディングとは関係ありません。\xXXエスケープを使用する代わりに、文字列リテラル (= ソース ファイルの引用符内の文字) に非 ASCII 文字を入力できるようにするだけです。

いくつかのことが明確になることを願っています。エンコーディング エラーのように見える問題は数多くあり、実際に何が起こっているのかを突き止めるのは必ずしも容易ではありません。

于 2013-06-03T18:40:17.113 に答える