Çarşamba, 22 Mayıs 2013 00:00

QTextCodec ile kodlama ve kod çözme işlemleri

Yazan 
Öğeyi Oyla
(0 oy)

Qt5 ile birlikte artık tüm kaynak dosyalar UTF-8 formatınd unicode olarak çalışılmaya geçmiştir. Daha önceden ise programlamacılar istedikleri formatda (ISO-8859-9 türkçe )  kaynak dosyalarını ayarlayabiliyorlardı. Yazılan karakterlerin QString tarafından unicode çevrileceği zaman hangi karakter kodlamasının kaynak dosyada kullanıldığının bilinmesi gerekiyordu. QTextCodec::setCodecForCStrings(codec) kodu ile bunu sağlıyorduk. Dolayısıyla Qt5 de bu fonksiyon kalktı. Aşağıdaki kod Qt4 için geçerli ve kaynak dosyalar Türkçe Karakter Fonut ISO-8859-9 formatı kullanılarak kodlanmıştır.

/* Burada QTextCodec, QTextStream kullanıldı.
  Konsolun "utf-8" kodlu olması durumunda aşağıdaki türkçe karakter
  çıktıları doğru olur.
  Bu dosya latin-5(8859-9) ile kodlanmıştır. Dolayısıyla burada yazılan türkçe
  karakterlerin doğru şekilde QString ile evrensel koda (Unicode) çevrilmesi için
  QTextCodec::setCodecForCStrings fonksiyonu kullanıldı.


  */

#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
QTextStream cin(stdin);
QTextStream cout(stdout);
int main(int argc,char * argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO-8859-9"));
    QCoreApplication app(argc, argv);
    cout<<QString("Testing")<<endl;
    cout<<QString("Türkçe karakter testi : çÇiİşŞüÜğĞöÖ")<<endl;
    cout<<"Codec Name for output to Console :"<<cout.codec()->name()<<endl;
    cout.setCodec("UTF-8");
    //Eğer konsol utf-8 bazlı ise türkçe karakterler latin-5 den rahatlıkla dönüşür.
    cout<<QString("Testing")<<endl;
    cout<<QString("Türkçe karakter testi : çÇiİşŞüÜğĞöÖ")<<endl;
    cout<<"Codec Name for output to Console :"<<cout.codec()->name()<<endl;
    //Burada QTextCodec ile çevrim yapılmaya çalışılıyor.
    QTextCodec::ConverterState * cstate = new QTextCodec::ConverterState(QTextCodec::IgnoreHeader|QTextCodec::ConvertInvalidToNull);
    cout<<cout.codec()->toUnicode("Türkçe karakter testi : çÇiİşŞüÜğĞöÖ",36,cstate)<<endl;
    cout<<"Codec Name for output to Console :"<<cout.codec()->name()<<endl;
    //Burada Latin-5 (8859-9) dan unicode doğru çevrim yapması için doğru QTextCodec kullanımı sağlanıyor.
    QTextCodec * trKodek=QTextCodec::codecForName("ISO-8859-9");
    cout<toUnicode("Türkçe karakter testi : çÇiİşŞüÜğĞöÖ",36,cstate)<<endl;
    cout<<"Codec Name for output to Console :"<<cout.codec()->name()<<endl;

    QList codecList = QTextCodec::availableCodecs();

    cout <<"Supported Codecs"<<endl;
    for(int i=0;i<codecList.length();i++)
    {
        cout << "Codec Name : " << codecList.at(i)<<endl;
    }

    /*
      Unicode karakter seti evrensel olduğu için tüm karakterler için karşılaştırma, büyültme ve küçültme
      fonksiyonları umulduğu gibi çalışmaya bilir. Aşağıda Türkçe karakterler büyültülüyor ve QLocale test ediliyor.


      */

    QString turkce_karakterler="ıüğşçö";

    cout << "Country :"<<QLocale::countryToString(cout.locale().country())<<endl;
    cout << "Language :"<<QLocale::languageToString(cout.locale().language())<<endl;
    QLocale turkish(QLocale::Turkish, QLocale::Turkey);

    cout << "Months"<<endl;
    for (int i=1; i<=12; i++)
        cout<<turkish.monthName(i)<<"\n";


    cout << "Türkçe karakter büyültme : " << turkce_karakterler<<turkce_karakterler.toUpper() << endl;


   return app.exec();
}

Okunma 488 defa
Ufuk Yıldırım

Yazılım Geliştirme Uzmanı

Web site: www.ufuk.biz

Yorum Ekle

Gerekli olan (*) işaretli alanlara gerekli bilgileri girdiğinizden emin olun. HTML kod izni yoktur.