Diğer iconv Gerçeklemeleri
Önceki Soysal Karakter Kümesi Dönüşümü Sonraki
Diğer iconv Gerçeklemeleri
Burada diğer sistemlerdeki iconv gerçeklemelerini tartışmayacağız, ancak taşınabilir uygulamalar yazılırken onlar hakkında biraz birşeyler bilmek gerekir. Önceki bölümlerde iconv işlevinin belirtimi ile ilgili olarak taşınabilirlik sorunlarından bahsetmiştik.
İlk uyarı, kullanılabilecek karakter kümesi sayısının çokluğu ile ilgilidir. Dönüşümlerin doğrudan C kütüphanesinde kodlanması elbette uygulanabilir değildir. Bu nedenle, dönüşüm bilgisi C kütüphanesi dışından bazı dosyalarla sağlanmalıdır. Bu, aşağıdaki yöntemlerden biri ya da her ikisi birden kullanılarak yapılır:
  • C kütüphanesi gerekli dönüşüm tablolarını ve diğer bilgileri veri dosyalarından okuyabilen işlevler ailesi içerir. Bu dosyalar gerektikçe yüklenir.
    Bu çözüm tüm karakter kümelerine (teorik olarak sonsuz sayıda) uygulanması büyük bir çaba gerektirdiğinden oldukça sorunludur. Farklı karakter kümelerinin yapısal farkları çok çeşitli tablo işleme işlevlerinin geliştirilmesini gerektirir.Bu işlevler doğaları gereğince özellikle gerçekleştirilmiş işlevlerden daha yavaştırlar.
  • C kütüphanesi özdevimli yüklenebilen nesne dosyaları içerir ve dönüşüm işlevleri bu nesnelerin içeriğini icra eder.
    Bu çözüm çok büyük esneklik sağlar. C kütüphanesinin kendisi çok az kod içerir ve bu nedenle genel bellek ihtiyacı çok azalır. Ayrıca, C kütüphanesi ile yüklenebilir modüller arasındaki belgelemesi yapılmış bir arayüz ile kullanılabilecek dönüşüm modüllerinin üçüncü parti modüllerle genişletilebilmesi mümkündür. Bu çözümün uygulanabilir olması için özdevimli yükleme mümkün olmalıdır.
Ticari Unix'lerdeki bazı gerçeklemeler bu yöntemlerin bir karışımını kullanırken çoğunluğu ikinci çözümü kullanır. Yüklenebilir modüllerin kullanımı kodu kütüphanenin dışına taşır ve genişletmeler ve eklentiler için kapıyı açık tutar. Ancak, durağan olarak ilintilenmiş yazılımlarda özdevimli yükleme desteği olmayan bazı platformda bu tasarım bir sınırlama haline gelebilmektedir. Bu yeteneği olmayan platformlarda bu arayüzün durağan olarak ilintilenmiş yazılımlarda kullanılması bu nedenle mümkün değildir. GNU C kütüphanesinin, ELF platformlarında, bu gibi durumlarda özdevimli yükleme ile ilgili sorunları yoktur; bu nedenle bu konu tartışma götürür. Tehlike bu durumla ilgili bilgi sahibi olunduğu halde diğer sistemlerin sınırlamalarını unutmaktır.
Diğer iconv gerçeklemeleri hakkında bilmemiz gereken ikinci şey kullanılabilecek dönüşümlerin genellikle çok sınırlı kalmasıyla ilgilidir. Bazı gerçeklemeler standart dağıtımlarında (geliştirici ve özel uluslararası dağıtımlar değil) en fazla 100 bilemedin 200 dönüşüm olasılığı sağlar. Bu 200 farklı karakter kümesinin desteklendiği anlamına gelse iyi; örneğin, bir karakter kümesinin on farklı karakter kümesine dönşümünü on olarak sayarlar. Bununla birlikte bu karakter kümesinin diğer yöndeki dönüşümü de eklenerek bu sayı 20 yapılır. Bu platformlarda yapılan ince hesabı varın siz düşünün. Bazı Unix şirketleri ise sadece bir dönüşümü diğer dönüşümleri kullanışsız olsa bile türetmek için kullanır.
Bu doğrudan üçüncü ve oldukça büyük bir soruna yol açar. Bu yolla gerçeklenmiş iconv dönüşüm işlevlerini kullanan Unix sistemlerinde A kümesinden B kümesine ve B kümesinden C kümesine dönüşüm yapılabilmesi A kümesinden C kümesine dönüşüm yapılabileceği anlamına gelmez.
İlk bakışta bir sorun yokmuş gibi görünse de basit bir uygulama sorunun farkedilmesini sağlar. Sorunu göstermek için A karakter kümesinden C karakter kümesine dönüşüm yapacak bir kod yazdığımızı varsayalım.
cd = iconv_open ("C", "A");
çağrısı yukarıda belirttiğimiz nedenle başarısız olacaktır. Şimdi yazılımımızın geleceği ne olacak? Bu dönüşüm gerekli...
Tam baş belası. iconv işlevi bunu yapmalıydı. Kodu nasıl yazmalı? Önce B karakter kümesine dönüşüm yapmayı deneyebiliriz:
cd1 = iconv_open ("B", "A");
ve
cd2 = iconv_open ("C", "B");
Bu çalışacaktır, ama B'nin hangi karakter kümesi olacağını nasıl bileceğiz?
Yanıtı ne yazık ki, genel bir çözümün olmadığıdır. Yine de bazı sistemler bize yardımcı olabilir. Bu sistemlerde çoğu karakter kümesi UTF-8 kodlu ISO-10646 veya Unicode metinlere ve tersine dönüştürülebilir. Bundan başka sisteme çok bağlı bir yöntem de yardımcı olabilir. Bu sistemlerde, dönüşüm işlevleri yüklenebilir modüllerde gelir ve bu modüller dosya sisteminde belirli bir yerde bulunurlar. Bu dosyalara bakarak A kümesinden C kümesine dönüşüm yaparken kullanılacak ortak ara dönüşüm kümesi saptanabilir.
Bu örnek, yukarıda bahsedilen iconv tasarım hatalarından birinin örneğidir. Kullanılabilecek dönüşümlerin listesini yazılımsal olarak elde etmek en azından mümkün olmalıdır. iconv_open işlevi böyle bir dönüşümün olamayacağını söylerse bu yolla bu liste bulunabilir.
Önceki Üst Ana Başlık Sonraki
iconv Örnekleri Başlangıç glibc iconv Gerçeklemesi
Bir Linux Kitaplığı Sayfası