1

我在我的代码中做了什么:

第一次我通过使用 codecs.open 加载一个 UTF-8 文本文件(是的,双重/三重/四重检查:它是 UTF-8)...

def load_verbslist(folder, name, utf_encoding):
    fullname = os.path.join("daten", folder, name)
    if utf_encoding:
        with codecs.open(fullname, "r", "utf-8-sig") as name:
            lines = name.readlines()
    else:
        name = open(fullname, "r")
        lines = name.readlines()
    for x in range(0, len(lines)):
        lines[x] = lines[x].strip("\n")
        lines[x] = lines[x].strip("\r")
    return lines

从那个文件中得到我的解决方案字符串。我后来分割线并再次编码所有内容以将其blit到屏幕上,如下所示:

class BlittedText():
    def __init__(self, number, colour):
        self.number = number
        self.colour = colour
        if self.number == 0: #Infinitiv
            self.content = Solution.verb[0]
            self.content = self.content.encode("utf-8")
            self.text = Main.font1.render(str(self.content), 1, self.colour)
            self.pos = (45, 45)

然后,我通过其中几个 BlittedText() 类附加了一个名为“Strings”的列表。

然后我将它粘贴到屏幕上:

for element in Strings:
    screen.blit(element, position)

结果可以在这张图片中看到:http: //img341.imageshack.us/img341/6617/ee43.png 在 Python shell(左侧)中,一切都正确显示,我的输入(非常左侧)作为来自解决方案 TXT 文件(肯定,肯定,100% 保存为 UTF-8)。在屏幕上,我的输入(黑色)正确显示,而解决方案字符串(绿色和红色)显示奇怪的字符而不是 unicode 字符。我想,我对它们进行了正确编码,但显然不是:/

有人发现我的错误吗?我的想法哪里出错了?

已经非常感谢了!

4

1 回答 1

2

您不应该utf-8在渲染之前将字符串编码为。当您将其编码为 utf-8 时,您将生成一个带有奇怪字符的常规字符串。

如果将其编码为 latin-1,则可以摆脱奇怪的字符:

self.content = self.content.encode("iso-8859-1")
于 2013-07-02T01:28:56.247 回答