Python文件
# -*- coding: UTF-8 -*-
a = 'Köppler'
print a
print a.__class__.__name__
mydict = {}
mydict['name'] = a
print mydict
print mydict['name']
输出:
Köppler
str
{'name': 'K\xc3\xb6ppler'}
Köppler
似乎名称保持不变,但只有在打印字典时才能获得这个奇怪的转义字符串。那我在看什么?这是UTF-8表示吗?
答案 0 :(得分:5)
该行为的原因是Python 2 escapes non-ASCII unicode characters中的__repr__
函数。如链接所示,这在Python 3中已得到修复。
答案 1 :(得分:4)
是的,那是ö
(U + 00F6 LATIN SMALL LETTER O WITH DIAERESIS)的UTF-8表示。它由一个0xC3八位字节后跟一个0xB6八位字节组成。我认为UTF-8是一种非常优雅的编码,值得一读。它的设计历史(在餐馆的餐垫上)是described here by Rob Pike。
答案 2 :(得分:1)
就我而言,Python中有两种显示对象的方法:str()和repr()。 Str()在print内部使用,但是显然dict的str()使用repr()来表示键和值。
如上所述:repr()转义unicode字符。
答案 3 :(得分:0)
您似乎正在使用python 2.x,您必须指定该对象实际上是一个unicode字符串而不是一个简单的ascii。您指定代码是utf-8,因此您实际为ö键入了2个字节,并且因为它是常规字符串,所以您获得了2个转义字符。
尝试指定unicode a= u'Köppler'
。您可能需要在打印前对其进行编码,具体取决于您的consol编码:print a.encode('utf-8')