2014-07-04 19 views
5

dizesi için dönüştürün UTF-8 biçiminde bir dizim var, ancak bu dizeyi karşılık gelen karakter literaline nasıl dönüştüreceğimizden emin değilim. Mesela ben dizesi vardır:UTF-8'i Python

Benim dizesidir: 'Entre\xc3\xa9'

örnek:

Bu kod: u'Entre\xe9'

Sonra devam ederse:

u'Entre\xc3\xa9'.encode('latin-1').decode('utf-8') 

sonuç döndürür Bunu yazdırarak:

bu büyük ve neye ihtiyacım yakındır:

Ben sonuç almak. Sorun şu ki, 'Entre \ xc3 \ xa9' değişkenini oluşturamıyorum ve şimdi kırıldığından bu adımlardan geçiriyorum. Bu çalışma için herhangi bir ipucu var mı?

Örnek: "c" sonucunu istiyoruz

a = 'Entre\xc3\xa9' 
b = 'u'+ a.encode('latin-1').decode('utf-8') 
c= 'u'+ b 

olmak:

Entreé 

cevap

8

u'' sözdizimi sadece dize hazır örn için çalışır Kaynak koddaki değerleri tanımlamak. Sözdiziminin kullanılması, oluşturulmakta olan unicode nesnesinin sonucudur, ancak böyle bir nesne oluşturmanın tek yolu bu değildir.

u ekleyerek bir byte dizesinden unicode değerini yapamazsınız. Ancak doğru kodlamayla str.decode()'u aradıysanız, unicode değerini alırsınız. Tam tersi, unicode nesnelerini unicode.encode() ile bayt dizelerine kodlayabilirsiniz. Bir unicode nesne görüntülenirken Python (çok u'...'), ayıklamayı kolaylaştırmak için tekrar Unicode dize sözdizimi kullanılarak onu temsil eder

not edin. Temsili bir Python yorumlayıcısına geri yapıştırabilir ve aynı değere sahip bir nesne alabilirsiniz. Yalnızca deşifre gerekir böylece

Sizin a değeri, değişmez bir bayt dizesi kullanarak tanımlanır:

a = 'Entre\xc3\xa9' 
b = a.decode('utf8') 

İlk örnek oluşturulan bir Mojibake, aslında temsil Latin-1 codepoints içeren bir Unicode dize UTF-8 bayt. Bu yüzden ilk önce Latin-1'e kodlayın (Mojibake'i geri almak için) ve sonra UTF-8'in kodunu çözmelisiniz.

Unicode HOWTO'da Python ve Unicode'da okumak isteyebilirsiniz.ilgi diğer haberler şunlardır: Ned Batchelder tarafından Joel Spolsky

  • Pragmatic Unicode tarafından

  • +0

    Birçok teşekkürler! yüzden şimdi girerseniz: piton tercüman içine b alıyorum: Ben girerseniz u'Entre \ xe9' : b yazdırmak alıyorum: antre otomatik antre dönecektir bir dize değişkeni olması mümkün mü baskı ifadesini kullanmadan? – Tminer

    +0

    @ user3804963: Sanırım buradaki değeri ('u'Entre \ xe9 ') karıştırıyorsunuz. 'print', python konsolunuz size gösterimi (hata ayıklama için) gösterirken (terminaliniz için kodlanmış) değeri gösterir. Hiçbir değer değişikliği gerçekleşmedi. Python, varsayılan ASCII'nin ötesinde kodlama kaynak kodu bildirmek zorunda kalmadan kaynak kodunuza kopyalanıp yapıştırılabilen bir değer gösterir, böylece U + 00E9 Unicode kod noktası için bir kaçış dizisi ('\ xe9') gösterilir. **Bu normal**. –