Yanıtlar:
Haklısın, bakınız 3.1.3. Unicode Dizeleri .
Python 2.0'dan beri sözdizimi oldu.
Python 3, varsayılan dize türü Unicode olduğu için bunları gereksiz hale getirdi. 3.0 ile 3.2 arasındaki sürümler kaldırıldı, ancak 2-3 geçişte Python 2 ile uyumluluk için yeniden eklendi .
ur"string"
) Birleştirmek Python 2'de geçerlidir, ancak ne yazık ki Python 3'te geçersiz sözdizimi
U u'Some String'
ifadesi, dizenizin bir Unicode dizesi olduğu anlamına gelir .
S: Çok korkunç ve acelem var ve buraya Google Arama'dan geldim. Bu verileri bir dosyaya yazmaya çalışıyorum, bir hata alıyorum ve bu saniye ölü en basit, muhtemelen, çözüme ihtiyacım var.
C: Joel'in Mutlak Minimum Her Yazılım Geliştiricisini karakter kümeleri üzerinde Unicode ve Karakter Kümeleri (Bahane Yok!) Makalesini Kesinlikle, Olumlu Olarak Bilmeniz Gerekiyor .
Q: sry hiçbir zaman kodu pls
Bir ceza. denemek str('Some String')
veya 'Some String'.encode('ascii', 'ignore')
. Ancak , Unicode dizesini dönüştürme ile ilgili bazı cevapları ve tartışmaları ve karakter kodlamayla ilgili bu mükemmel, mükemmel, primeri gerçekten okumalısınız .
Benim tahminim "Unicode" u gösteriyor, doğru mu?
Evet.
Eğer öyleyse, ne zaman kullanılabilir?
Python 2.x.
Python 3.x'de dizeler varsayılan olarak Unicode kullanır ve u
ön eke gerek yoktur . Not: Python 3.0-3.2'de u bir sözdizimi hatasıdır. Python 3.3+ sürümünde 2/3 uyumlu uygulama yazmayı kolaylaştırmak yine yasaldır.
u
Öneki kullanmak Python 3'te bir Sözdizimi Hatası bile .
six.text_type()
hala 3 kullanan (umarım küçük) sayıda kişi için her yerde kullanmayı düşünüp düşünmeyeceğinize karar vermeniz gerekir . [012] - en azından bilgi orada, böylece seçim yapabilirsiniz.
Buraya geldim çünkü çıktımda komik-char-sendromu vardı requests
. response.text
Bana düzgün bir şekilde çözülmüş bir dize vereceğini düşündüm , ancak çıktıda Alman umlautlarının olması gereken komik çift karakterleri buldum.
Görünen response.encoding
o response
ki bir şekilde boştu ve bu yüzden içeriğin düzgün bir şekilde nasıl çözüleceğini ve sadece ASCII olarak ele alındığını bilmiyordum (sanırım).
Benim çözümüm ham baytları 'response.content' ile almak ve el ile uygulamaktı decode('utf_8')
. Sonuç schöne Umlaute oldu.
Doğru kod çözme
kürk
uygun şekilde kodu çözülmemiş
fĂźr
İnsanlara yönelik tüm teller u "" kullanmalıdır.
Aşağıdaki zihniyetin Python dizeleri ile uğraşırken çok yardımcı olduğunu gördüm: Tüm Python manifest dizeleri u""
sözdizimini kullanmalıdır . ""
Sözdizimi sadece, bayt dizileri içindir.
Dayak başlamadan önce açıklayayım. Çoğu Python programı ""
dizeler için kullanmaya başlar . Ama sonra internetten belgeleri desteklemeleri gerekiyor, bu yüzden kullanmaya başlıyorlar "".decode
ve aniden bu ve bunun kodunu çözme konusunda her yerde istisnalar alıyorlar - hepsi""
dizelerin . Bu durumda, Unicode bir virüs gibi davranır ve tahribat yaratır.
Ancak, kuralımı takip ederseniz, bu enfeksiyona sahip olmayacaksınız (çünkü zaten enfekte olacaksınız).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Unicode.
Değişkeni arasına koymanız yeterli str()
olacaktır.
Ancak aşağıdaki gibi iki listeniz olması durumunda:
a = ['co32','co36']
b = [u'co32',u'co36']
Kontrol ederseniz set(a)==set(b)
, Yanlış olarak gelir, ancak aşağıdaki gibi yaparsanız:
b = str(b)
set(a)==set(b)
Şimdi, sonuç Doğru olacaktır.
str()
veya u'€'.encode()
) kodlamasından geçmeden asla kodlanmamalısınız . Dize ASCII dışı içeriyorsa, kullanıcı bir UnicodeEncodeException alır.
b = str(b)
dizesini verir repr()
, yani b = "[u'co32', u'co36']"
. Sonraset(a)==set(b) = False