0

私は Python 3.2.3 を使用しており、アイドル状態でテキスト ゲームをプログラムしています。私は.txtファイルを使用して、後でプログラムによって開かれ、ターミナルで描画されるマップスキームを保存しています(今のところIDLE)。

.txt ファイルの内容は次のとおりです。

╔════Π═╗
Π      ║ 
║w bb c□
║w bb c║ 
╚═□══□═╝

Π: ドア; □:窓。b: ベッド; c: コンピューター; w:ワードローブ

私はプログラミングが初めてなので、これを行うのは難しい問題です。

このためにこれまでに作成したコードは次のとおりです。

doc =  codecs.open("D:\Escritório\Codes\maps.txt")
map = doc.read().decode('utf8')
whereIsmap = map.find('bedroom')
if buldIntel == 1 and localIntel == 1:
    whereIsmap = text.find('map1:')
    itsGlobal = 1
if espLocation == "localIntel" == 1:
    whereIsmap = text.find('map0:')
if buldIntel == 0 and localIntel == 0:
    doc.close()

for line in whereIsmap:
    (map) = line
    mapa.append(str(map))
doc.close()

if itsGlobal == 1:
    print(mapa[0])
    print(mapa[1])
    print(mapa[2])
    print(mapa[3])
    print(mapa[4])
    print(mapa[5])
    print(mapa[6])
    print(mapa[7])

if itsLocal == 1 and itsGlobal == 0:
    print(mapa[0])
    print(mapa[1])
    print(mapa[2])
    print(mapa[3])
    print(mapa[4])

2 つのマップがあり、それぞれにタイトルがあり、小さい方はマップ 1 (私が示したもの) です。

プログラムを実行しようとすると、Python から次のエラー メッセージが表示されます。

Traceback (most recent call last):
  File "C:\Python32\projetoo", line 154, in <module>
    gamePlay(ask1, type, selfIntel1, localIntel, buildIntel, whereAmI, HP, time, itsLocal, itsBuild)
  File "C:\Python32\projetoo", line 72, in gamePlay
    map = doc.read().decode('utf8')
  File "C:\Python32\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

IDLE 端末に表示されたとおりの地図を正確に印刷するにはどうすればよいですか?

4

1 に答える 1

2

問題は、エンコーディングを指定せずに を使用していて、既に Unicode 文字列であるにもかかわらず、codecs.openによって返された文字列をデコードしようとしていることです。doc.read()

codecs.openこれを修正するには、 :への呼び出しでエンコーディングを指定します。そうすれば、後でcodecs.open("...", encoding="utf-8")への呼び出しは不要になります。.decode('utf-8')

また、Python 3 を使用しているため、以下を使用できますopen

doc = open("...", encoding="utf-8").read()

最後に、印刷するときに Unicode 文字列を再エンコードする必要があります。

print("\n".join(mapa[0:4]).encode("utf-8"))
于 2012-06-06T18:25:39.493 に答える