C++ Locale - Türkçe Karakter Sorunu

20 Ara 2015 · 2 dk okuma süresi

C++ veya C dilinde birçok kişinin canını sıkan konuya değiniyoruz. Yaptığınız programlarda Türkçe karakterleri konsola yazdırmak istediğimizde kodlamadan dolayı anlamsız karakterler görüyorsunuz. Yani Türkçe karakter sorunu ile karşılaşıyorsunuz. Aşağıdaki fotoğraf sayesinde ne demek istediğimi anlayabilirsiniz.

cpp-tr-karakter-ornek

Gördüğünüz gibi “Fazla çikolata yemek diş sağlığını bozabilir” cümlesindeki Türkçe karakter olan “ç, ş, ğ, ı” harfleri yerini anlamsız karakterlere bıraktı. Peki bu sorunu nasıl çözebiliriz?

Bu sorunu çözmek için C++ programına ‘Locale’ bilgisini veriyoruz. Bu Locale dediğimiz şey ‘Yerel’ anlamına geliyor. Yani biz programın Locale özelliğini istediğimiz ülkenin kodunu girerek veya direk programın çalıştırıldığı bilgisayarın varsayılan ülkeye göre ayarlanmasını sağlıyoruz ve dolayısıyla o ülkenin dil, tarih, para birimi gibi C++ dilinin ortamında barındırdığı, lokasyona göre değişiklik gösteren özelliklerini istediğimiz ülke için ayarlamış oluyoruz. Lafı daha fazla uzatmadan örneğe geçelim.

Locale özelliğine iostream kütüphanesi içindeki std namespace adı altından erişebiliyoruz. Genel kullanımı şu şekildedir:

std::locale::global(locale("TR")); //Burada direk Türkiye için yerelleştirme yapıldı.
std::locale::global(locale("")); //Burada ise programın çalıştırıldığı bilgisayarın varsayılan ülkesine göre yerelleştirme yapıldı.

Şimdi ise yukarıda gösterdiğim, Türkçe karakter içeren cümleyi Locale özelliğini Türkçe yaparak test edelim:

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
  locale::global(locale("TR")); //TR yazdığımız yeri boş bırakarak bilgisayarınızda varsayılan olarak ayarlanmış ülkeyi kullanabilirsiniz.

  cout<<""Fazla çikolata yemek diş sağlığını bozabilir" cümlesinde Turkce karakterler mevcut"<<endl;

  system("Pause");

  return 0;
}

Programın çıktısı bu sefer istediğimiz gibi olmuş mu diye bakalım:

cpp-tr-karakter-ornek2

Evet, resimde de görüldüğü gibi Locale özelliği TR olarak belirttikten sonra Türkçe karakter sorunu ortadan kalktı.

Dilerseniz aşağıdaki örnekteki gibi Locale özelliğini bilgisayarda yani işletim sisteminde varsayılan olarak kabul edilen ülkeye göre ayarlayabiliyorsunuz:

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
  locale::global(locale("")); // sol taraftaki ülkeyi belirttiğimiz tırnağın içini boş bırakıyoruz.

  cout<<""Fazla çikolata yemek diş sağlığını bozabilir" cümlesinde Turkce karakterler mevcut"<<endl;

  system("Pause");

  return 0;
}

Ayrıntılı İngilizce Kaynak: CPP-Reference

C Dili İçin İngilizce Kaynak: cplusplus.com