2011-11-12 24 views
6

Eski bir appengine uygulamasında değişiklik yapmaya çalışıyorum, ancak şimdi bilgisayarımı kurduktan ve güncellenmiş araçları yükledikten sonra günlük işlevleri bir unicode hatası oluşturuyor.Unicode unicode, UnicodeDecodeError'ı günlüğe kaydetme (App Engine)

Önceki geliştirme ortamında her şey iyi çalıştı. ubuntu 9.04 python2.6 ben bu ortamı kullanarak bir değişiklik yapmak çalışıyorum Şimdi 1,5

google appengine sdk: ubuntu 11.10 python2.7 google appengine sdk 1.6

bu yeni gelişme ortamında ben günlüğe kaydetme işlevlerini kullanarak hata alıyorum.

logging.info(u'Gerando lista de exibição') # error 

Hata:

logging.info(u'Gerando lista de exibicao') # ok

Editörüm utf-8 ve tüm komut "kodlama: utf-8" var: İlk olarak

'ascii' codec can't decode byte 0xc3 in position 22: ordinal not in range(128) args = ('ascii', 'Gerando lista de exibi\xc3\xa7\xc3\xa3o', 22, 23, 'ordinal not in range(128)') encoding = 'ascii' end = 23 message = '' object = 'Gerando lista de exibi\xc3\xa7\xc3\xa3o...' reason = 'ordinal not in range(128)' start = 22

Ben aksan kaldırmak gerek çözüm için hat.

Bu bir sürüm sorunu mu? Yapılacak bazı ayarlar var mı?

+1

Bu hatanın oluştuğu yer için yığın izi alabilir misiniz? Bir Unicode dizesinin 'Logger' örneğine gönderilmesi iyi olmalıdır. GAE koduna bakıldığında, bu dizinin UTF-8 kodlamasını denemeli ve daha sonra varsayılan olarak "stderr" işleyici akışına yazmalıdır. Ancak hata, bir şey UTF-8 baytlarını Unicode'a (ve varsayılan kodlamayı kullanarak) dönüştürmeye çalıştığı gibi görünmesini sağlar. Stderr'in üstünde bir şey var mı ve normal bayt yerine Unicode'u kullanmak için hacklemek mümkün mü? – bobince

+0

Şu an bir yığın izim yok, ancak her zaman django üzerinde unicode dizeleri kullanıyorum, herhangi bir günlük kaydı işlevini kullanıyorum ve neve sorunları vardı. Ancak uygulama motorunda bir hata olduğunu fark ettim. Yukarıdaki yanıtlarıma bakın [burada] (http://stackoverflow.com/questions/8107388/unicode-with-accents-raising-unicodedecodeerror-on-logging-app-engine/8112992#8112992) – Yoshio

cevap

-1

Python 2, kaynak kod için varsayılan olarak UTF-8 kullanmıyor, aksi halde kodlamayı belirtmeniz gerekir. Neyse, kaynak kodunda Unicode tutmak iyi bir fikir değil PEP-263

#!/usr/local/bin/python 
# -*- coding: utf-8 -*- 

bakınız.

+0

dediğim gibi: * Benim editör utf-8 ve tüm betikler ilk satır olarak "kodlama: utf-8" var * – Yoshio

+0

Kaynak kodda unicode kullanmıyorum, utf-8 ve tüm dizeleri unicode nesneleridir. – Yoshio

+0

Yoshio, örneğinizde Unicode kullanıyorsunuz! – sorin

0

Bu sayfayı unicode and utf-8 kodlamayla kontrol etmeyi deneyebilirsiniz. Stratejiler ve geçici çözümler de dahildir. Python 2 varsayılan kodlama 'ascii' olduğundan bilinen bir sorun.