Kendi meşrebinde hem blog, hem Türkçe dökümantasyon

Etiketler

14 Kasım 2009 Cumartesi

Leopard / Snow Leopard UTF8 - Türkçe sorunu bitmiiiiyoooorrr!!!

Çok basit iki unix komutundan bahsetmek istiyorum, cat ve sort. Unix'in en büyük olayı, pipe'larla yani | işaretiyle, yapılan işlemin sonucunu , bir sonraki komuta geçirebilme özelliğidir. Şimdi çok basit bir sıralama işlemi yapacağız, aslında Mac OS'da yapamayıp, Ubuntu'da yapacağız ne yazıkki... Hemen bir Terminal açın ve sorter.txt adında bir boş dosya oluşturun, oluşan dosyayı nano'da açıp ( ya da TextMate / TextEdit vs... ) aşağıdaki metni yapıştırın :
ümit
cemal
uğur
ali
vigo
çek
ıtri
bronx
ömer
şekip
şimdi yukarıdaki işlemleri yapalım;
$ touch sorter.txt
nano sorter.txt


Daha sonra yukarıdaki metni copy-paste ( kopyala / yapıştır ) ile nano'ya yerleştirin ve kaydedip çıkın ( kntrl + o ve kntrl + x ). Şimdi cat komutu ile dosyanın içeriniği ekrana basın.
$ cat sorter.txt

Gördüğün gibi cat ile dosyanın içeriği ekraba basıldı. Şimdi pipe mantığını kullanarak, satır satır ekrana yazdırdığımız bu metni, a'dan z'ye alfabetik olarak sıralayalım yani sort edelim!
$ cat sorter.txt | sort

Gördüğünüz gibi garip bir şekilde sıralandı:
  1. ali
  2. bronx
  3. cemal
  4. uğur
  5. vigo
  6. çek
  7. ömer
  8. ümit
  9. şekip
  10. ıtri
Eğer dikkat ettiyseniz, TÜRKÇE ile ilgili kelimeler, normal sıralamadan sonra yapılmış, yani İNGİLİZCE'ye göre a-b-c-d-e-f-g-h-i..... şeklinde ali-bronx-cemal-uğur-vigo doğru sırada, fakat bronx'dan sonra gelmesi gereçen çek sonda... Neden acaba? hemen locale'imize bakalım :
$ locale

BOOOOM! Benim locale'lim komple TÜRKÇE'ye ayarlı. sort komutun man page'in bakınca derki : ( terminal'de her hangi bir komutun nasıl çalıştığını öğrenmek için man kullanabilirsiniz. Eğer HODO diye bir komutun açıklamasını görmek isterseniz man HODO yazın, eğer varsa man page'i gelir! )
*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.
Yani sıralama işlemi, o an terminal'de bulunan kullanıcının locale ayarıyla etkileşimlidir, yani eğer Türkçe işlem yapmak istersen locale'ini Türkçe'ye, Almanca işlem yapacaksan Almanca'ya göre ayarla... Türkçe için külliyen YALAN! Bunu hem LEOPARD hem de SNOW LEOPARD'da da denedim... Acaba dedim sorun benim ayarlarda filanmı? hemen lokalimdeki Ubuntu'da yaptım aynı testi...

Önce locale'i kontrol ettim.


Sonra komutu çalıştırdım. Aslanlar gibi çalıştı sıkıntısız. Ne yapmalı, derdimizi kime anlatmalı bilmiyorum? Aradaki tek fark, Mac OS'daki sort 2005 yılına ait, Ubuntu'daki ise 2008 yılına. Belki ilk bakışta "ya bu benim ne işime yararki?" diye düşünebilirsiniz. Bu ve buna bağlı olarak pekçok şey de aynı sıkıntı olabilir. Keza çok benzer bir sorunu tarih ile ilgili bir işlem yaparken yaşamıştım.

Umarım ben bir yerlerde hata yapmışımdır ve benim eksik bilgimden kaynaklı bir sorun söz konusudur fakat çok araştırdım, sanki sorun bende değil gibi... Keza export LC_ALL=tr_TR.ISO8859-9 bile denedim. Belki bundandur diye. Ne yazıkki çözemedim. Eğer yazımı okuyan ve çözümü bilen biri varsa lütfen yorum bıraksın ya da bana mesaj atsın!

Özellikle TextMate kullanıcıları ( filtreleme ) ya da Snow Leopard kullanıcıları ( servis ) bu ve buna benzer shell komutlarını kullanarak hayatlarını kolay hale getirebilirler. Ne yazıkki bu en temel unix komutu SORT güzel türkçemizi sıralayamıyor!

2 yorum:

Ozkan dedi ki...

Bunu yapacagimiz mini toplantilarda gundeme tasiyalim. Ayni sekilde QuickLook'taki Unicode problemini de. Dert vallahi ya

Uğur "vigo" Özyılmazel dedi ki...

özkocum, ql deki mevzu, text file daki bom ile ilgili. eğer manuel eklersen bunu sorunsuz fakat her text dosyası oluşturduğunda bunu elle yapmak ölüm

Yorum Gönder

İzleyiciler

Blog Listem

Yazılacak Yazılar

  • Snow Leopard için service yazıyoruz!
  • MacPorts nedir?
  • Virtualbox , Ubuntu ve Host'da duran web folder'ı
  • Django'ya giriş?
  • Dashcode ile MobileSafari uygulaması
  • Quicklook için Plug-in yazalım?
View blog authority