Python:如何从.txt文件中打印unicode字符串

时间:2012-06-06 18:19:43

标签: python unicode character-encoding file-manipulation

我正在使用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])

有两个地图,每个地图都有一个标题,较小的一个是map1(我已经展示过的那个)。

如果我尝试运行程序,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终端?

1 个答案:

答案 0 :(得分:2)

问题是您在没有指定编码的情况下使用codecs.open,然后尝试解码doc.read()返回的字符串,即使它已经是Unicode字符串。

要解决此问题,请在致电codecs.opencodecs.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"))