python中的编码:变量是什么类型

时间:2011-03-21 10:26:20

标签: python encoding

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表示吗?

4 个答案:

答案 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')