当应用程序打印hei\xdfen而不是heißen时,这意味着您实际上不是在打印实际的unicode字符串,而是在unicode对象的字符串表示形式上。
假设字符串(“heißen”)存储在名为text的变量中。为了确定您所处的位置,请通过调用以下命令检查此变量的类型:>>> type(text)
如果您得到,这意味着您不处理字符串,而是处理unicode对象。
如果你做了直觉的事情,并试图通过调用print(text)来打印文本,你就不会得到实际的文本(“heißen”),而是得到unicode对象的字符串表示。
要解决此问题,您需要知道终端具有哪个编码,并打印出根据给定编码编码的unicode对象。
例如,如果终端使用UTF-8编码,则可以通过调用以下命令打印出字符串:text.encode('utf-8')
这是基本概念。现在让我给你一个更详细的例子。假设我们有一个存储字典的源代码文件。比如:mydict = {'heiße': 'heiße', 'äää': 'ööö'}
当您键入print mydict时,您将得到{'\xc3\xa4\xc3\xa4\xc3\xa4': '\xc3\xb6\xc3\xb6\xc3\xb6', 'hei\xc3\x9fe': 'hei\xc3\x9fe'}。甚至print mydict['äää']也不起作用:它会导致类似├Â├Â├Â的结果。通过尝试print type(mydict['äää'])可以揭示问题的本质,这将告诉您您正在处理一个string对象。
为了解决这个问题,首先需要将源代码文件的字符集中的字符串表示形式解码为unicode对象,然后在终端的字符集中表示它。对于单个dict项,可以通过以下方法实现:print unicode(mydict, 'utf-8')
注意,如果默认编码不适用于您的终端,您需要编写:print unicode(mydict, 'utf-8').encode('utf-8')
其中,外部编码方法根据终端指定编码。