Python ile Firebird(Türkçe Sorunu)
mrb python ile firebird denemelerimde
#!/usr/bin/env python
# -*- coding: cp1254 -*-
import kinterbasdb
import os,sys
DATA = kinterbasdb.connect(dsn='SERVER:DATA', user='SYSDBA', password='masterkey', dialect=3, charset='WIN1254')
TSICIL = DATA.cursor()
TSICIL.execute("select * from MUSTERI where ID BETWEEN 1 AND 10")
print TSICIL.fetchall()
bu kod ile aldığım sonuç
[(0, u'HAR\u0130C\u0130', u'MAKBUZ', u'KES\u0130M\u0130', 0, 1, 0, u'BO\u015e')]
sorunun nerde olduğunu bulamadım.
Sitelerdeki farklı örneklerdede hiç türkçe kullanılmamış.
siz nasıl çözdünüz acaba bu sorunu
- 222 okunma




baDibere
Re: Python ile Firebird(Türkçe Sorunu)
cp1254 yerine utf-8 dener misiniz?
nedimtrc
Re: Python ile Firebird(Türkçe Sorunu)
mrb daha öncede denemiştim galiba üstte tanımlanan belirttiğimiz kod yazma kısmında türkçe kullanabilmek için kullanılıyor. Benim sıkıntım çıktı üzerinde oluyor mesela print 'İŞĞ' yazınca düzgün çıkıyor ama datayı listeletince sıkıntı oluyor.Mysql ve access ile örnekler vardı ama onlarda hiç türkçe(Ğ,İ,Ş) kullanılmamış.
Nmalodia
Re: Python ile Firebird(Türkçe Sorunu)
Python'da listeleri, demetleri ve sözlükleri doğrudan yazdırmak istediğinizde Türkçe karakterler sorun çıkaracaktır. Yukarıda verdiğiniz kodun çıktısını doğrudan ekrana basmayıp bir değişken içinde depoladığınızı varsayıyorum:
a = [(0, u'HAR\u0130C\u0130', u'MAKBUZ', u'KES\u0130M\u0130', 0, 1, 0, u'BO\u015e')] for i in range(len(a[0])): try: print unicode.encode(a[0][i],"cp1254") except TypeError: passBu yaklaşım işinize yarayabilir.
nedimtrc
Re: Python ile Firebird(Türkçe Sorunu)
denedim çok teşekkür ediyorum.Bu durumda çıkarılacak sonuç her edit yada grid e datadaki veriyi yazarken bu dönüşümü yapmam gerek galiba siz grid yada textbox ile ekrana veri yazdırma ve ekrandaki girilen veriyi dataya yazma konusunda nasıl bir yol izliyorsunuz acaba basit bir örnekleme yaparsanız çok sevinirim.
Nmalodia
Re: Python ile Firebird(Türkçe Sorunu)
Ben soruna yaklaşımın nasıl olabileceğini göstermek açısından, yukarıdaki kodları aldığınız çıktıya uyguladım. Ama siz verileri doğrudan unicode olarak da alabilirsiniz. Böylece veritabanından gelen bütün bilgiler, "ascii" yerine "cp1254" (veya utf-8") olarak yazdırılır.
Kullandığınız "kinterbasdb" adlı modülü kullanmadım daha önce. Kullandığınız modülün belgelerini bir kontrol edin. Verileri unicode olarak almak için ne tür parametreler sunuyor...
Ama yazdığınız kodlara bakınca şöyle bir şey olabilirmiş gibi görünüyor:
import kinterbasdb import os,sys DATA = kinterbasdb.connect(dsn='SERVER:DATA', user='SYSDBA', password='masterkey', dialect=3, charset='WIN1254') TSICIL = DATA.cursor() TSICIL.execute("select * from MUSTERI where ID BETWEEN 1 AND 10") a = TSICIL.fetchall() for i in range(len(a[0])): try: print unicode.encode(a[0][i],"cp1254") except TypeError: passAncak elbette bu kodların başarılı olabilmesi için, alınacak verinin tipini, niteliğini ve hatta kullandığınız modülün yapısını bilmek gerekiyor. Ama yukarıdaki yolun en azından size bir fikir vereceğine eminim...
İyi çalışmalar,