PyGame:正确使用Unicode
我的目标是创建一个程序,用户可以通过向用户展示一个问题并通过输入解决它来学习圣经经文(例如,“引用vers Gen 3:15”)。因为我必须处理的圣经翻译是德语,它包含了大量的乌姆洛特语,这些语言从来没有正确地显示出来 我的PyGame文件头:PyGame:正确使用Unicode,unicode,pygame,Unicode,Pygame,我的目标是创建一个程序,用户可以通过向用户展示一个问题并通过输入解决它来学习圣经经文(例如,“引用vers Gen 3:15”)。因为我必须处理的圣经翻译是德语,它包含了大量的乌姆洛特语,这些语言从来没有正确地显示出来 我的PyGame文件头: #!/usr/bin/python # -*- coding: utf-8 -*- 稍后,我列出了三个德国Umlaut: u'ö'.encode('utf-8') u'ä'.encode('utf-8') u'ü'.encode('utf-8') 此
#!/usr/bin/python
# -*- coding: utf-8 -*-
稍后,我列出了三个德国Umlaut:
u'ö'.encode('utf-8')
u'ä'.encode('utf-8')
u'ü'.encode('utf-8')
此函数解析txt文件:
def加载列表(列表名称):
我知道,我可以将这两行代码与strip命令结合起来,但这不是本文的主题
如何让PyGame正确显示文本文件中的UMLAUT以及正确显示用户输入的UMLAUT?我检查了数百条建议,我在这里找不到真正有用的东西
非常感谢您的帮助,在我失去理智之前(好吧,因为我坐在这里编写游戏,我可能已经这么做了:D)我将尝试总结:
- 打印字符串或unicode对象以外的内容会触发该对象的
方法。如果它是一个序列,这也适用于包含的元素,导致任何非ascii字符都用\uuuu repr\uuu()
(或\xXX
)符号转义。注意\uxxx
和print'text'
之间的区别:在后一种情况下,字符串的引号也将被打印出来(当然除了括号之外)。使用print['text']
连接字符串列表,以控制输出的外观str.join()
- 最好总是明确地对输入进行解码(就像您使用
)并对输出进行编码(这在您的问题中的代码片段中没有完成)编解码器
- 源文件编码(标题中的
行)与输入和输出的编码无关。它只允许您在字符串文本(=源文件中引号内的字符)中键入非ascii字符,而不使用转义#coding:utf8
希望这能让一些事情更清楚。有很多看起来像是编码错误的地方可能会出错,而且要找出实际发生的情况并不总是那么容易。您的游戏是如何执行的?命令行?您可能需要在打印前对输出进行编码,以匹配终端的编码。无论如何,您对umlaut字母(第二个代码块)进行编码的行没有任何作用:它们只是三个未分配给任何内容的字符串。谢谢您的回答,但我真的不理解第一个,抱歉。你的意思是我基本上是对文件的输入进行编码,这没有意义,而是应该将打印输出编码为unicode?我不知道如何实现它,但我可以使用像:打印u’lines这样的东西吗?或者将其放入for循环并作为print u'lines[x]?好吧,现在这很奇怪o.o当我打印一行时:print lines[x]它正确地显示所有unicode字符,当我将整个内容打印为一个列表时:print lines然后它显示那些\x。。。再次编码…似乎我发现了一些问题:整个字符串列表不能正确地“unicode编码”,即使我在列表中的单个字符串上使用unicode,如果打印,列表本身也不会正确显示。因为我无论如何都需要从列表中打印一个字符串,所以最终可能不会有问题。。。回到更多的实验…我真的不知道为什么在我发布的代码中blit的umlauts是有效的。我只是做了一些其他的事情,用同样的方法(不是)编码输出,但它在那里不起作用。。。也许我最好再写一遍。。。无论如何,我非常感谢任何关于如何对输出进行编码的提示,我现在正在做很多尝试,似乎什么都不管用。。。e、 g.string.encode(“utf-8”)会导致一个“怪异”字符(umlauts的替代品)的闪动,任何进一步的umlaut输入都会导致unicode的超出范围错误……我做到了,再次感谢你:D你的评论让我找到了问题并最终解决了它:)
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