27 Kasım 2010 Cumartesi

Python da encoding hataları

Mümkün olduğu kadar uygulamalarda encode ve decode olaylarından
uzak durun desemde en başa encode utf yazılıyor karışık bir durum..
Maksadınız kullanıcı tarafından girilen yada bir fonksiyon veya işlecden sonra
döndürülen bilgiyi kesinlikle ham halinde brakınız.Şayet sabit bir kullanıcı gurubu
var ise klavye girdi desenleri sabittir, bu duruma uygun kodlama kullanmanız
gerekir.

Bir sonuç girdisinin başka bir değişkene atanması demek varsayılan kodlama
süzgecinden geçmiş olur.
 Örnek:
 #-*- coding: utf8 -*-
kelime = "şişğçü"
hop_degis = kelime ##şimdi utf-8 kodlamasından geçmiş oldu

>>> fg=raw_input("yaz bakalım:")
yaz bakalım:şğğüçşğüşçğü
>>> fg
'\xfe\xf0\xf0\xfc\xe7\xfe\xf0\xfc\xfe\xe7\xf0\xfc'
>>> der=fg.encode('cp1254')
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
der=fg.encode('cp1254')
File "C:\Python26\lib\encodings\cp1254.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 0: ordinal not in range(128)
>>> print str(fg)
şğğüçşğüşçğü

Print fonksiyonunda bir sorun çıkarmaz fakat değişkenlere aktardığımız
zaman kodlama hatası verir.


>>> c=(str(fg)).decode('cp1254')
>>> print c
şğğüçşğüşçğü

Kodlama yerine dosya isimleri, hesap adları vs verilerinde yazılan betiği
kapsamlı bir try - excep yazılması hata risklerini azalttığı gibi kapsamlı bir hata
sınıflandırması yapmamızıda sağlar.

Hiç yorum yok:

Yorum Gönder