seo karakter tablolama sistemi

2 Temmuz 2013 Salı Unknown 0 yorum

UNICODE Karakter Tablolama Sistemi


işletim
            ASCII tablosunda her karakter 1 byte yer kaplayacak biçimde tutulur. Bu durum ancak 256 değişik karakterin ifade edileceği anlamına gelir. Son yıllarda her bir karakterin 2 byte ile ifade edildiği UNICODE tablolama sistemi ASCII sistemiyle birlikte kullanılmaya başlanmıştır. UNICODE tablosunun ilk 256 karakteri ASCII tablosundaki karakterlerin aynsıdır. Bu tabloda dünyadaki bütün ulslara ilişkin harf simgeleri vardır.
            Bir UNICODE karakter C'de unsigned short int türüyle ifade edilir. Bu tür şimdilik her sistemde 2 byte uzunluğundadır. Windows.h içerisinde typedef unsigned short int wchar_t biçiminde ve typedef wchar_t WCHAR biçiminde iki typedef ifadesi vardır. C++'ta 1996 standardında wchar_t bir anahtar sözcüktür. wchar_t C++'ta 2 byte uzunluğunda işaretsiz bir tam sayı türünü belirtir. UNICODE bir yazı wchar_t türünden bir yazı içerisinde saklanabilir. C'de normal string'ler birer byte uzunluğunda ASCII değerleriyle belleğe yerleştirilirler. Bir string'in başına L getirilirse (L"string" gibi) UNICODE string elde edilir. Bu durumda derleyici string'in herbir karakterini iki byte uzunluğunda UNICODE karakter tablosuna uygun olarak yerleştirir. NULL karakter iki byte uzunluğunda 0 biçimindedir. Derleyici UNICODE string yerine wchar_t türünden bir adres yerleştirir. C'de çalışıyorsak bu adres unsigned short int türünden bir adrestir. C++'ta çalışıyorsak wchar_t türündendir. Örneğin:



UNICODE karakter sabiti de söz konusudur. UNICODE karaketre sabitleri L'a' biçiminde belirtilir. Tabii wchar_t türünden bir değişkene doğrudan bir ASCII karakter sabiti atanabilir(C'de farklı türden bilgiler birbirlerine atanabilir).


Ancak yine de okunabilirlik bakımından atamanın şu biçimde yapılması tavsiye edilir.



            Bir programın UNICODE ve ASCII version'larının kolaylıkla elde edilebilmesi için şöyle bir sistem düşünülmüştür:



            Eğer program içerisinde her zaman TCHAR ismi kullanılırsa windows.h include ifadesinin yukarısına #define UNICODE yazılıdğında bütün TCHAR'lar wchar_t yazılmadığında ise bütün TCHAR'lar char anlamına gelirler. Yani bütün program TCHAR ismini kullanacak biçimde yazılmalıdır. Tabii bir string'in de otomatik olarak UNICODE ya da ASCII string biçiminde kolay bir dönüştürmeye tabii tutulması gerekmektedir. Bu işlem TEXT makrosuyla yapılmaktadır.

            Bu makro windows.h içerisinde tanımlanmıştır. Görüldüğü gibi eğer UNICODE sembolik sabiti tanımlanmış ise TEXT("ali") gibi bir makro ön işlemci tarafından L"ali" biçimine dönüştürülür. Eğer UNICODE sembolik sabiti TEXT("ali") "ali" biçimine dönüştürülür. TEXT makrosu karakter sabitleri için de kullanılabilir. Sonuç olarak bir programı ASCII ve UNICODE uyumlu yazabilmek için:
1. char ya da wchar_t yerine her zaman TCHAR kullanılmalı,
2. UNICODE string ya da ASCII string yerine her zaman TEXT makrosu kullanılmalıdır.

Yazı Parametresi Alan API Fonksiyonları

            Bir yazıyı parametre olarak alan API fonksiyonlarından gerçekte iki tane vardır: ASCII ve UNICODE versiyonları. Örneğin, MessageBox fonksiyonundan iki tane vardır: MessageBoxA, MessageBoxW. Aslında 32 bit Wndows sistemlerinde 16 bit Windows sistemlerindeki gibi MessageBox isimli bir fonksiyon yoktur. MessageBox yazıldığı zaman ön işlemci, UNICODE sembolik sabitinin tanımlanıp tanımlanmadığına göre bunu MessageBoxA ya da MessageBoxW şekline döndürür. Tabii, bu fonksiyonların UNICODE versiyonlarında parametreler wchar_t * biçiminde ASCII versiyonları char * biçimindedir. Örneğin, MessageBox API fonksiyonu için windows.h içerisinde şu biçimde bir işleme sokulmuştur.


ASCII ve UNICODE Uyumlu Tür İsimleri

            Unıcode sembolik sabitine bağımlı olan iki tür ismi vardır. Yani bu durumda LPTSTR ve LPCSTR duruma göre wchar_t ya da char * olmaktadır. Aslında bu türler gösterimlerde daha çok iki versiyonu olan API fonksiyonlarının parametrelerini belirtmek için kullanılır.Örneğin MessageBox fonksiyonun prototipi şöyledir:
           
 Standart C Fonksiyonları ve UNICODE İşlemleri

            C’ nin standart string fonksiyonları (örneğin; strlen(), strcpy() gibi) default olarak ASCII sistemine göre çalışmaktadır. Bütün bu fonksiyonların ayrıcaUNICODE versiyonları da vardır. Ancak en iyisi bu fonksiyonların UNICODE duyarlı isimlerini kullanmaktır. UNICODE duyarlı isimler tchar.h dosyasında tanımlanmıştır. Bu yüzden bu dosyanın da include edilmesi gerekir. Ancak bu duyarlılık, UNICODE değil _UNICODE ismine göre yazılmıştır. Örneğin, tchar.h içerisinde şöyle bir _tcslen ismi strlen fonksiyonunun _UNICODE duyarlı biçimidir.


            Bunların dışında tchar.h içeriside TEXT makrosu gibi ancak _UNICODE sembolik sabitine duyarlı _T, __T,  _TEXT makroları da vardır. Sonuç olarak, durum biraz karışmış olmasına karşın, şu özet notlar alınabilir:

1.   UNICODE ve ASCII string elde etmek için TEXT, _T, _TEXT, __T makrolarının hepsi kullanılabilir.  ancak TEXT UNICODE sözcüğüne diğerleri ise _UNICODE sözcüğüne duyarlıdır. Tabii TEXT dışındakilerde tchar.h dosyasının include edilmesi gerekir.

2.   TCHAR türü UNICODE duyarlı bir türdür. Yani yalnızca windows.h dosyasının include edilmesiyle kullanılabilir.

3.   Bir yazıyı parametre olarak alan API fonksiyonlarından ASCII ve UNICODE olmak üzere ikişer tane vardır.

4.         Bir yazıyı parametre olarak alan Standart C fonksiyonlarının UNICODE versiyonları da vardır. Bunların _UNICODE duyarlı isimleri kullanılmaktadır

0 yorum: