Ben bu kod Python 2'de çalışmaktadır ve Python 3'te sadece json bir sayfasını kapmak ve sonra ayrıştırmak çalışıyorum değil neden anlamaya çalışmakla gerçekten yorulmadan o.Python 2 vs Python 3 - urllib formatları
import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Ben Python 3'te eşdeğer kod bu olurdu düşünce: Burada Python 2'de kod
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Ama, yüzüme patlarsa çünkü okuma döndürdüğü verileri () bir "bayt" türüdür. Ancak, hayatım boyunca jsonun ayrıştırabileceği bir şeye dönüşmesini sağlayamam. Ben reddit bana geri utf-8 göndermeye çalışıyor başlıklarından biliyorum, ama bayt utf-8 içine çözmek için almak gibi olamaz: Neyi yanlış yapıyorum
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content.decode("utf8"))
?
Düzenleme: Sorun, verileri kullanılabilir bir duruma alamam; json veriyi yüklese de, bunun bir kısmı çözülemez ve verileri ekrana yazdırabilmek istiyorum.
İkinci düzenleme: Sorun ayrıştırma daha baskı yapmak için daha fazla vardır, öyle görünüyor. Alex'in cevabı, IO'yu utf8'e ayarlayarak, betiğin Python 3'te çalışması için bir yol sağlar. Ama yine de bir soru var: neden kod Python 2'de çalışmış, Python 3 değil?
Kod hatalarını düzeltebilirim ... Ekranı yeniden biçimlendirmeyi denedim, ancak işlemin hepsini batırdım. : P Yine de, ben ayrıştırdıktan sonra verileri görüntüleyemiyorum (basit bir "yazdırma (veri)" kullanarak), çünkü bana charmap hataları veriyor. –
@Daniel, problemleri _after_ elde ettiniz, bu verilerden veri almakla ilgili ayrı bir soru gibi görünüyor (ki benim cevabım, göründü, yanıt verdi - yine de kabul etmiyor olsanız da, siz yapmadıysanız) t bile onu kışkırt!). Eğer "data" ile "json.loads (response)" demek istediyseniz, herhangi bir sorun olmadan yazdırabilirim (UTF-8'i destekleyen Mac Terminal.app'ımda). Sys.stdout.encoding'iniz nedir? Python 3'ü başlatmadan önce "PYTHONIOENCODING" ortam değişkenini doğru olarak ayarladınız mı: Stdin/stdout/stderr' için kullanılan kodlama [: errors]? Vb, vb - tamamen farklı konular, bkz. –
İlk başta belirsiz olsaydım özür dilerim. Çekirdek problemi, her ne sebeple olursa olsun, ayrıştırmadan sonra verileri kullanamıyorum * (yazdırma sadece bir başlangıcıdır; yazdıramıyorsam, o zaman satırın aşağısında bir yerde başım belaya girer) veri okuma). Kodlamayı kontrol edeceğim, W7 makinemde çalışmadığını söylemek yeterli. –