Python kod çözme Unicode desteklenmez


81

Python'daki kodlamamla ilgili bir sorun yaşıyorum. Farklı yöntemler denedim ama çıktımı UTF-8 olarak kodlamanın en iyi yolunu bulamıyorum.

Yapmaya çalıştığım şey bu:

result = unicode(google.searchGoogle(param), "utf-8").encode("utf-8")

searchGoogleiçin ilk Google sonucunu döndürür param.

Aldığım hata bu:

exceptions.TypeError: decoding Unicode is not supported

Bu hatayı önlemek için Python'un çıktımı UTF-8 olarak nasıl kodlayabileceğimi bilen var mı?

Yanıtlar:


102

google.searchGoogle(param)Zaten geri dönüyor gibi görünüyor unicode:

>>> unicode(u'foo', 'utf-8')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    unicode(u'foo', 'utf-8')
TypeError: decoding Unicode is not supported

Yani istediğiniz şey:

result = google.searchGoogle(param).encode("utf-8")

Bir yan not olarak, kodunuz utf-8kodlanmış bir dize döndürmesini bekler, bu nedenle kod çözme (kullanarak unicode()) ve .encode()aynı kodlamayı kullanarak geri kodlama (kullanarak ) ne anlama geliyordu?


4
Dürüst olmak gerekirse, unicode()ne olduğunu anlamaya çalışmakla dalga geçiyorlardı. Çok teşekkür ederim :-)
simonbs

2
Şimdi bazen alacağım ascii' codec can't decode byte 0xc3 in position. Bunun neden olduğunu biliyor musun?
simonbs

2
Önerdiğim satırda mı? O zaman searchGoogle (), 0xC3 baytlı bir dize döndürdüğü anlamına gelir. .encode()Bunu çağırmak , Python'un önce unicode'a dönüştürmeye çalışmasına neden olur (ascii kodlamasını kullanarak). SearchGoogle () 'ın neden bazen unicode ve bazen bir dize döndürdüğünü bilmiyorum. Belki ne verdiğine bağlıdır param? Bir türe bağlı kalmaya çalışın.
yak

66
Keşke unicode'a çevirmenin güvenli ve basit bir yolu olsaydı.
Eric Walker

@EricWalker Zaten Unicode'daysa param'ı değiştirmeden def uors2u(object, encoding=..., errors=...)döndürecek objectveya str ise dönüştürecek gibi garip bir yardımcı işlev yazabilirsiniz . Ancak bu kod kokuyor. Tüm girdileri dışarıdan alır almaz (bir dosya sistemi gibi) Unicode'a dönüştürmeli ve geri göndermeden önce gerekirse geri dönüştürmelisiniz. Str'yi unicode'a dönüştürdüğünüz tek bir yer olmalıdır, bu nedenle anlattığım gibi bir yardımcı işleve ihtiyaç duyulmamalıdır.
Leonid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.