2009-06-13 24 views
23

unicode karakter Unicode kaçış dizilerini dönüştürmek yapmak "unicode (head.contents [3])" i buna benzer çıktı almak xf6ld". Kaçış dizisinin dize olarak döndürülmesini istiyorum. Python'da nasıl yapılır?nasıl bir piton dize

cevap

28

Python normal dize olarak adını görür varsayarsak, öncelikle unicode bunu deşifre gerekecek:

>>> name 
'Christensen Sk\xf6ld' 
>>> unicode(name, 'latin-1') 
u'Christensen Sk\xf6ld' 

Bunu gerçekleştirmenin bir başka yolu:

>>> name.decode('latin-1') 
u'Christensen Sk\xf6ld' 
aşağıdaki örneğe bakın

Dizenin önündeki "u" ile, kodun değiştirilmediğine dikkat edin. Eğer bu yazdırırsanız, aksanlı harf düzgün gösterilmiştir:

>>> print name.decode('latin-1') 
Christensen Sköld 

BTW: gerektiğinde size örneğin içine unicode açmak için de "kodlamak" yöntemini kullanabilir UTF-8 dizesi: Unicode ile bir bayt dizisi Verilen

>>> name.decode('latin-1').encode('utf-8') 
'Christensen Sk\xc3\xb6ld' 
+0

çok teşekkürler dostum. Yani bir veritabanına kaydetmek için ihtiyacım olursa onu çözebilir ve veritabanına kaydedebilirim, değil mi? – Vicky

+1

NO, Mark örneğini tekrar okuyun. Unicode'a ne olursa olsun (latin1, cp1252, vb.) Verileri kod çözdükten sonra, (1) veritabanınızın desteklediği ve (2) tüm unicode karakterlerini koruduğu bir kodlama ile unicode dizginizi kodlamanız gerekir ... tipik olarak UTF-8 . –

8

Kesintisiz çalıştığından şüpheleniyorum. Varsayılan olarak, tüm terminaller unicode'u desteklemediğinden, Python ASCII kodlamasında dizeleri görüntüler. Aslında dizeyi yazdırırsanız, çalışmalıdır.

>>> u'\xcfa' 
u'\xcfa' 
>>> print u'\xcfa' 
Ïa 
+0

Sorun terminalde bulunuyorsa, bir veritabanına (MySQL) kaydedersem düzgün görüntülenecek mi? – Vicky

+0

Evet, öyle olacak, ancak DB'nizin harmanlama/karakter seti kodlamanızla ilgilenmeniz gerekiyor. – securecurve

6

b"\N{SNOWMAN}", b"\N{SNOWMAN}".decode('unicode-escape) beklenen Unicode dizesi u'\u2603' üretecek kaçar.