Forumlar > Atölye > Yazılım Geliştirme (Python ile Firebird(Türkçe Sorunu))
nedimtrc kullanıcısının resmi

nedimtrc

Kayıt: 30/03/2009

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

Top
baDibere kullanıcısının resmi

baDibere

Kayıt: 14/10/2007

Re: Python ile Firebird(Türkçe Sorunu)

cp1254 yerine utf-8 dener misiniz?

Top
nedimtrc kullanıcısının resmi

nedimtrc

Kayıt: 30/03/2009

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ış.

Top
Nmalodia kullanıcısının resmi

Nmalodia

Kayıt: 13/11/2008

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:
        pass

Bu yaklaşım işinize yarayabilir.

Top
nedimtrc kullanıcısının resmi

nedimtrc

Kayıt: 30/03/2009

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.

Top
Nmalodia kullanıcısının resmi

Nmalodia

Kayıt: 13/11/2008

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:
        pass

Ancak 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,

Top