2016-03-21 36 views
0

için bir JSON mevcut değeri ile dolu bir dizi var, benim Setimden yazdırırken aşağıdaki çıktıyı aldım:accentuation Python: yapı ve döngü

set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma']) 

ama her yazdırırsanız for döngüsü kullanarak öğe aşağıdaki çıktıyı alır:

Pathé 
Synergy Cinéma 

Neden her sözcük için aynı kodlama yok?

cevap

1

Python 2'yi kullanıyorsunuzdur ve varsayılan kodlama davranışıyla ilişkili olabilir. Setinizde depolanan değer "kodlanmış" değerdir ve print (bu nesnenin temelindeki __repr__ ve/veya __str__ yöntemlerine dayanır) kullandığınızda, kodu çözülmüş/biçimlendirilmiş çıktıyı alırsınız (varsayılan sistem kodlamasına göre).

Sen) piton 3'te, kodlama varsayılan olarak utf-8 (olduğunu yani. Varsayılan olarak "yaratılmış herhangi bir dize (... fonksiyonu sys.getdefaultencoding()

Not ile kullanılan varsayılan kodlaması hakkında bilgi edinebilirsiniz Unicode olarak depolanır ", documentation'a göre) ve tam olarak aynı davranışa sahip olmayacaksınız (python 2 snippet'inde, python set s üzerinde bulunan karma değerler, bunlara dayandığından, giriş dizeniz kodlanmışsa aynıdır Not:

Python 2:

>>> a = b'Path\xc3\xa9' 
>>> a 
'Path\xc3\xa9' 
>>> print(a) 
Pathé 
>>> sys.getdefaultencoding() 
'ascii' 
>>> hash('Pathé') 
8776754739882320435 
>>> hash(b'Path\xc3\xa9') 
8776754739882320435 

Python 3:

>>> a = b'Path\xc3\xa9' 
>>> a 
b'Path\xc3\xa9' 
>>> print(a) 
b'Path\xc3\xa9' 
>>> print(a.decode()) 
Pathé 
>>> sys.getdefaultencoding() 
'utf-8' 
>>> hash("Pathé") 
1530394699459763000 
>>> hash(b"Path\xc3\xa9") 
1621747577200686773