ASP türkçe karakter sorunu - Access veya Mysql

ASP türkçe karakter sorunu - Access veya Mysql
ASP türkçe karakter sorunu - Access veya Mysql

4 yıldır artık eski bir kodlama dili olan ASP ile içli dışlı proje üreticisi olarak türkçe karakterler ile yaşanan zorluklardan bıkan arkadaşlara birkaç tavsiye ve kodlama yöntemi ile bu sorunlardan tamamen kurtaracağız.

Bir ASP sayfa ve veritabanı arasında veri alışverişinde sonucun başırıyla gerçekleşmesi için hem veritabanının hem aktarım yolunun hem de sonuç kısmı olan sayfanın kodlama dili rol oynar.

İlk dönemler ASP de türkçe karakter sıkıntılarında öyle usanmıştım ki, insanın ilim bilim aşkını öldürürcesine..

Öncelikle şöyle başlayalım;

Veritabanına hiçbir zaman ç-Ã?-ö-Ã--ÄY-Äž-ü-Ão-ı-Ä° gibi veya buna benzer bol soru işaretli veriler kaydetmeyin. Eğer istamsiz olarak oluyor, düzeltmek istiyor düzeltemiyorum diyorsanız panik yok, bu yazıda çözümü var. Ama bunu göre göre ilerleyip, veritabanında öyle ama ben onu sayfada replace komutu ile düzelttiriyorum diyorsanız projeniz beş para etmez, yapmayın. 

Çünkü evet, sunum sayfasında düzelttirirsiniz bir şekilde.. Ama veritabanında bir arama yapmaya kalktığınızda arama kelimelerini de mi replace yapacaksınız? Jquery nesnelerinde arama yaparken? Kısacası o işten hayır gelmez.

Hatasız bir proje için sistemdeki tüm işleyişi UTF-8 Unicode ile sürdüreceğiz.

1) Tüm çıkış verilerini UTF-8 yapıyoruz.
<%
Response.ContentType = "text/html" 
Response.Charset = "UTF-8"
%>


Eğer Access veritabanı kullanıyorsanız karakter kodlarınızın altına aşağıdaki satırları da ilave etmeniz gerekiyor.
<%
Response.Codepage = 65001
%>


Örnek Access veritabanı ile bağlantı :
<%
Response.ContentType = "text/html" 
Response.Charset = "UTF-8" 
Response.Codepage = 65001 
Set baglanti = server.CreateObject("adodb.connection") 
baglanti.open "Provider=Microsoft.Jet.oledb.4.0;Data Source=" & server.Mappath("veritabanim.mdb")
%>


Eğer Access değil de MySQL veritabanı kullanıyorsanız veritabanı bağlantı kodunuzun altına aşağıdaki satırları da ilave etmeniz gerekiyor.
<%
baglanti.Execute "SET NAMES 'utf8'" 
baglanti.Execute "SET CHARACTER SET utf8" 
baglanti.Execute "SET COLLATION_CONNECTION = 'utf8_bin'"
%>


Örnek Mysql Bağlantı :
<%
Response.ContentType = "text/html" 
Response.Charset = "UTF-8" 
Set baglanti = Server.createObject("Adodb.Connection") 
baglanti.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER="server ip"; UID="kullanici_adi "; pwd="parola"; db="veritabani_adi";" 
baglanti.Execute "SET NAMES 'utf8'" 
baglanti.Execute "SET CHARACTER SET utf8" 
baglanti.Execute "SET COLLATION_CONNECTION = 'utf8_bin'"
%>


2) Arayüz kodlama dili mutlaka UTF-8 olmalı.

Meta etiketi olarak : Sayfa ile arasında yapıştırın.

3) Veritabanı UTF-8 - general_ci olmalıdır. (Bu özellikle MySQL kullananlar için geçerlidir.)

Bu işlemleri yaptıktan sonra hala hata alıyorsanız çok yüksek ihtimalle ASP dosyanız UTF-8 değildir. 
ASP Dosyanıza sağ tıklayın > Birlikte aç > Not defteri 
Yolu ile not defterinde açın. Daha sonra ise;
Dosya menüsünden > Farklı kaydet > Kodlama dili ni UTF-8 olarak seçip kaydedin. 

Artık hiçbir sorununuzun kalmaması gerekiyor.

Unutmayın; temiz ve düzenli bir kodlama proje hayatını ve gidiş hattını uzatır.

Umarım yardımcı olabilmişimdir.
İyi çalışmalar. 

Bugün bir iyilik yap, bu yazıyı arkadaşlarınla paylaş :

SİZİN İÇİN ÖNERİLEN YAZILAR

YORUMLAR

  1. profil Furkan

    Allah razı olsun umudum tükenmişken sayenizde buldum çözümünü :)

  2. profil Özer

    Hocam selamlar,
    Sitenizi sürekli takip ediyorum, ellerinize emeğinize sağlık. Hala ilgileniyor musunuz bilmiyorum ama bu başlıkla alakalı bir sorum olacaktı. Macbook PRO kullanıyorum, dolayısıyla not defteri yok, dreamweaver cs6 da yazıyorum. Şimdi dediğiniz gibi tüm db yi utf8 general a getirdim, site de dediğiniz gibi tr_TR ve UTF-8. Ancak yine de mysql den veri çekerken veya veri gönderirken ÖÇÜöçü tamam ama şiğüıŞİĞÜ karakterlerinde ??? çıkıyor sadece. Hatta yanlış söyledim, general yapınca ÖÇÜöçü de çıkmıyor ÃÇŎİĎÌöçşığü falan gibi şeyler çıkıyor. Latin5'i denedim, bir de utf turkish i, onlarda ÇÖÜ ve öçü düzgün görüntülenip yüklenebiliyor.
    Yardımcı olursanız gerçekten sevinirim, resmen tıkandım burada..
    İyi çalışmalar dilerim.

    • Hafzullah YILDIRIM

      Merhabalar Özer; ASP de 3 aşamalı dil kodlaması vardır. Veritabanı UTF8 olarak yapılandırılmalı. Kodlama yapılan Asp dosyası UTF8 olmalı. Son olarak veritabanı bağlantı kodları UTF8 ile sağlanmalı. Bu üçünü sağlarsan hiçbir karakter sorunu yaşamazsın. Japonca karakterler de Arapça karakterlerde kullanırsın. Bu üçünü de yapıp, hala sorun yaşaman imkansız.

      • Özer

        Cevabınız için çok çok teşekkürler. Ancak sorunum devam etmekte ve nerede yanlış yaptığımı bir türlü anlayamıyorum, kafayı yemek üzereyim :)
        Bir kez daha yardımınızı rica ederim,
        Veritabanını Sequel Pro'da düzenliyorum, Table Info bölümünde ve structure bölümünde, yani hem direkt verinin kendisi ve hem de tablo utf-8 ve detayda general_ci.
        Veritabanı bağlantı yolu
        Response.ContentType="text/html"
        Response.Charset="UTF-8"
        Set baglanti=Server.createObject("Adodb.Connection")
        baglanti.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" & mysql_server & "; UID=" & mysql_user & "; pwd=" & mysql_pass & "; db=" & mysql_db & ";"
        baglanti.Execute "SET NAMES 'utf8'"
        baglanti.Execute "SET CHARACTER SET utf8"
        baglanti.Execute "SET COLLATION_CONNECTION='utf8_bin'"
        Ve HTML sayfanın kodlaması,
        <meta charset="UTF-8">
        Nereyi atlıyor olabilirim acaba??
        Yardımlarınız için şimdiden çok ama çok teşekkürler.

      • Hafzullah YILDIRIM

        Herşeyi aynen anlattığın gibi yapıyorsan sunucu okuması problemlidir. O da htaccess veya web.config dosyası içeriğinde olması lazım. Kontrol et istersen bir.

  3. profil Özer

    öçşığüÖÇŞİĞÜ yerine öçşığüÖÇŞİĞÜ gözükmekte.

    • Hafzullah YILDIRIM

      Herşeyi aynen anlattığın gibi yapıyorsan sunucu okuması problemlidir. O da htaccess veya web.config dosyası içeriğinde olması lazım. Kontrol et istersen bir.

Yorum yap

Geçersiz bir mail adresi girdiniz. Lütfen tüm zorunlu alanları doldurun. *