当您的申请打印出来时hei\xdfen
代替heißen
,这意味着您实际上并没有打印实际的 unicode 字符串,而是在 unicode 对象的字符串表示形式上打印。
让我们假设您的字符串(“heißen”)存储在名为的变量中text
。为了确定您所处的位置,请通过调用以下命令检查该变量的类型:
>>> type(text)
如果你得到<type 'unicode'>
,这意味着您处理的不是字符串,而是一个unicode
object.
如果您执行直观的操作并尝试通过调用打印到文本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'}
. Even print mydict['äää']
不起作用:它会导致类似的结果├Â├Â├Â
。通过尝试揭示问题的本质print type(mydict['äää'])
这会告诉你,你正在处理一个string
object.
为了解决这个问题,您首先需要将源代码文件的字符集的字符串表示形式解码为 unicode 对象,然后在终端的字符集中表示它。对于单个字典项目,可以通过以下方式实现:
print unicode(mydict, 'utf-8')
请注意,如果默认编码不适用于您的终端,您需要编写:
print unicode(mydict, 'utf-8').encode('utf-8')
其中外部编码方法根据您的终端指定编码。
我真的强烈建议你读一下乔尔的书“每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!)”。除非您了解字符集的工作原理,否则您将一次又一次地遇到类似的问题。