Turning gears are the logo of co-scripts

Merhaba,

Başka bir Türkçe karakter sorunu yazısında tekrar birlikteyiz. Çok itici bir giriş oldu belki ama farklı platform ve araçlarla çalışanların sürekli başına gelen bir problem. Ve bu problem başladığında projenin geri kalanının anlamı kalmıyor ;)

Hala çok az bilgim olan bir konuda size 2-3 ipucu vereceğim. Karakter verisi iki şekilde görünür, birincisi hafızada yer aldığı formu, diğeri kullanıcının arayüzünde sergilendiği formu. Veri tabanları bizim görmek istediğimiz formatta tutmak zorunda değillerdir. yine de veri kaybına uğramamaları için olası görüntülenecekleri dilin verileriyle saklanmaları temel limittir. 

Başıma gelen olayda MSSQL sunucu da tutulan metin bazlı verilerin nvarchar tipinde olması gerektiğini önceden öğrenmiştim. Bazen ntext yada char sorun çıkartabiliyordu. Hala bunların neden böyle olmaları gerektiğini kesin olarak bilmiyorum.

Veriyi mssql ve mysql gibi sql sunucular Collation isminde bir tip özelliğiyle (dil kodu) birlikte saklıyor ve sunuyorlar. Şuradan detaylı temel bilgiler alınabilir. Collation tablosu (listesi) burada görülebilir. Garip bir çeviri ile MS'in yazısı burada, SQL ile collation desteğini çevirebilmek için güzel bir trick örneğini buradan görebilirsiniz.

Gelelim ASPUpload'un konuyla ilişkisine. Bildiğimiz gibi veritabanına kayıt yapan .asp sayfamızın kodlamasına eskiden hiç dikkat etmezdik.

Ancak Türkçe Collation kullanan bir tablomuz varsa (MSSQL de) ve bir upload formu kullanarak metin verisi de gönderiyorsak üstelik sayfamız utf8 ile kodlanmışsa ASP içinden session, codepage,response metodları çok kar etmiyor.

Türkçe dil sorunlarını görüntüleme kısmında yani kullanıcı tarafında nasıl çözüldüğünü şu yazıda belirtmiştik. Ancak upload formunun getirdiği multipart verisinin metin kısmı için utf-8 kodlu sayfalarda mssql'e karakter bozulması olmadan girebilmesi için Set Upload = Server.CreateObject("Persits.Upload") kodu ile oluşturulan upload nesnesine ait CodePage kullanılmak zorunda. Hemen alt satıra şunları yazarak bu işi çözmüş oluyoruz.

Upload.CodePage = 65001 kaynak

Detaylı bilgiyi üstte verdiğim kaynaktan alabilirsiniz.

En başta bana sonra başkasına yardımı dokunur diye bu kodları bir yerlerde toplama ihtiyacımdan meydana gelen bu sitedeki yazılardaki amatörlüklerin hoş görülmesi dileğimle.

co-scripts tag image aspuploadmssql karakter sorunuutf8upload.codepagecodepageunicode
ID:223 | Okunma:3931


 

Asp sayfalarımızda, html sayfalarımızda ve ajax uygulamalarımızda sıklıkla karşılaşılan Türkçe karakter sorununa elbette internetten ulaştığımız bir bilgi ile çözüm bulduk.

Metin tabanlı dosyalar kaydedilirken belli bir formatta kaydedilirler. Bu format bilgisi içinde karakter destekleri de vardır. ASP,HTML,JS gibi dosyaları kaydederken en az problem çıkartabilecek utf-8 i tercih ediyoruz.

Bu dosyanın çalıştırılması sonucu üretilen çıktıların browserda görüntülenmesi sırasında doğru görüntülenmesi ve sunucudan doğru gönderilmesi için tüm dosyalarımızda şu belirteçleri kullanıyoruz.

 

ASP için (html içinde ayrıca meta tagı kullanıyoruz)

response.charset="ISO-8959-9" 
Session.Codepage = 1252
Response.Codepage = 65001

Buradaki 1252 ve 65001 utf-8 içeriği taşıdığını bildiriyor sunucuya, sunucuda ona göre kodlayarak yolluyor karakterleri.

 

Ajaxta :

Response.ContentType = "text/xml" 

kullanıyoruz ek olarak.

HTML içinde ayrıca browser'a anlatmak için meta tagları kullanıyoruz.

co-scripts tag image karakter kodlamakarakterencodingcodepagecharsetturkce-karakter-sorunuutf-8iso-8959-9125265001windows-1254
ID:200 | Okunma:5157