SORU
15 Aralık 2008, PAZARTESİ


Python UnicodeDecodeError - kodlamak yanlış Mıyım?

Bu çalışmıyor neden herhangi bir düşünce? Gerçekten 'Yoksay' doğru olanı yapardı.

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)

CEVAP
16 Aralık 2008, Salı


...adında bir sebebi var""... . kodlamalar

Küçük bir başlangıç: norm, ya da ideal devlet olarak unicode düşünüyorum. Unicode karakterleri sadece bir tablo. No: 65 latin sermaye no: 937 A. Yunan sermaye omega. Sadece o.

Bir Bilgisayar Mağazası için ve-veya Unicode işlemek için vardırkodlamakbayt içine. En basitkodlamaUnicode olduğunu USC-4; her karakter 4 byte kaplar ve ~1000000 tüm karakterler kullanılabilir. 4 bayt 4 bayt tamsayı Unicode tablolardaki karakter sayısını içerir. Çok kullanışlı başka bir kodlama bir ile dört bayt ile herhangi bir Unicode karakter kodlama olan UTF-8'dir. Ama aynı zamanda "latin1" karakterler çok sınırlı bir yelpazede yer alıyor, çoğunlukla tarafından kullanılan Batılı ülkeler gibi sınırlı bazı kodlamalar vardır Böylekodlamalarher karakter tek bayt kullanın.

Temelde, Unicode olabilirkodlanmışbirçok kodlamaları ile kodlanmış dizeleri olabilirçözülürUnicode için. Şey, Unicode oldukça geç, 8-bit kullanarak büyümüş çok hepimiz geldikarakter kümesiçok geç tüm bu zaman boyunca öğrendikleri ile çalıştıkkodlanmışdizeleri. Kodlaması İSO8859-1 veya windows CP437, CP850 ya, ya, ya, ya, bizim sistemde varsayılan olarak.

Bu kadar zaman, kaynak kodu, girdiğiniz string "Ekle “İzleme“ listesine" (ve sanırım istediğin dize "Ekle “İzleme” liste" not ikinci alıntı), eğer gerçekte kullanarak bir dize zatenkodlanmışsistem varsayılan kod sayfası göre (\x93 Windows kullandığınız varsayıyorum bayt kod sayfası 1252 tarafından,“”), Batı. Eğer Unicode almak istiyorsanız, gerekirkod çözmebu dizeden "cp1252" kodlama.

Yani, ne yapmak istediğin, oldu:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

2 Python talihsiz bir durum.x içerir .encode yöntem için dizeleri de; bu bir kolaylık işlevi için "özel" kodlamaları, "zip" veya "rot13" veya "base64" olanlar, hangi olayla bir ilgin olmadığını Unicode.

Neyse, to-and-fro Unicode dönüşüm için hatırlamak zorunda

  • bir Unicode dize alırkodlanmışbir Python 2 için.x string (aslında, bir bayt dizisi)
  • bir Python 2.x dize alırçözülürbir Unicode dize

Her iki durumda da, belirtmek gerekirkodlamabu kullanılacaktır.

Çok net değilim, uykum var, ama ben emin ben yardımcı umut.

PS mizahi BİR yan not: Mayalar Unicode yoktu; eski Romalılar, eski Yunanlılar, Eski Mısırlılar da yoktu. Hepsi kendi vardı "kodlamalar", ve küçük diğer kültürlere saygı için. Tüm bu uygarlıklar toz ufalanmış. Düşün insanlar! Uygulamalarınızı, Unicode uyumlu, insanlığın iyiliği için yapmak. :)

Lütfen diyerek önceki mesaj bozma PS2 "Ama Çinliler...". Eğer Unicode BMP çoğunlukla Çin ideograms tarafından doldurulan düşünerek bu gecikme olsa ya da bunu yapmak için eğimli zorunlu hissediyorum, bu yüzden Çin Unicode temelidir. Çirkin yalanlar icat, insanlar Unicode-uyumlu uygulamalar geliştirmek sürece gidebilirim. Şerefe!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Feel The Electricity!

    Feel The Ele

    20 ŞUBAT 2010
  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • SamsTech

    SamsTech

    4 NİSAN 2014