我在代码中做了什么:
第一次我使用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
从该文件到我的解决方案字符串。我后来拆分了行并再次对所有内容进行编码,然后像这样将它显示在屏幕上:
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)
然后我追加一个名为" Strings"的列表。几个BlittedText()类。
然后我把它搞砸到屏幕上:
for element in Strings:
screen.blit(element, position)
结果如下图所示: http://img341.imageshack.us/img341/6617/ee43.png 在Python shell(左侧)中,一切都正确显示,我的输入(非常左侧)作为解决方案TXT文件中的字符串(当然,肯定是100%保存为UTF-8)。在屏幕上,我的输入(黑色)正确显示,而解决方案字符串(绿色和红色)显示奇怪的字符而不是unicode字符。我想,我正确编码了它们,但显然不是:/
有没有人发现我的错误?我的想法出了什么问题?
非常感谢你!
专利
答案 0 :(得分:2)
在渲染之前,不应将字符串编码为utf-8
。
当您将其编码为utf-8时,您将生成一个包含奇怪字符的常规字符串。
如果你把它编码为latin-1,你可以摆脱奇怪的角色:
self.content = self.content.encode("iso-8859-1")