Python 3.x ve Türkçe Desteği
Python’la elini kirletmiş olanların aşina olduğu gibi, Python’un 2.x sürümlerinde Türkçe desteği tam değil. Bazı noktalarda Türkçe karakterleri düzgün olarak gösterebilmek için türlü taklalar atmamız gerekebiliyor. http://www.istihza.com/makale_lenascii.html adresindeki makalede belirttiğim gibi, bu sorunlar Python’un varsayılan kod çözücüsünün “ascii” olmasından kaynaklanıyor. Ancak Python 3.x ile beraber Türkçe sorunları büyük ölçüde çözüldü. Neden? Çünkü artık Python’un varsayılan kod çözücüsü “ascii” değil “utf-8″… Bunu şu şekilde teyit edebiliriz:
>>>import sys >>>sys.getdefaultencoding()
Bu komutun çıktısı, 2.x sürümlerinin aksine “utf-8″ olacaktır. Bu çıktı, Türkçe program yazanlar için büyük önem taşıyor. Mesela artık bir liste tanımlayıp, listenin öğelerini ekrana yazdırmak istediğimiz zaman rahatlıkla şu kodları yazabiliriz:
>>>liste = ["çilek", "şelale", "yıldız", "kağıt"]
>>>print(liste)
Aynı kodları 2.x sürümlerinde denediğimizde şöyle bir sonuç alırız:
>>> print liste ['\xc3\xa7ilek', '\xc5\x9felale', 'y\xc4\xb1ld\xc4\xb1z', 'ka\xc4\x9f\xc4\xb1t']
Mesela len(“ç”) gibi bir fonksiyon da artık doğal olarak “1″ çıktısını verecektir…
Bütün bu güzel gelişmelere karşın, çözülmemiş tek bir sorun kalmış gibi görünüyor. O da karakter dizilerinin upper() metoduyla ilgili… Şu örneğe bir bakalım:
>>> for i in liste: ... print(i.upper()) ... ÇILEK ŞELALE YILDIZ KAĞIT
Gördüğünüz gibi, “i” harfi noktasız olarak büyütülüyor… Ama http://bugs.python.org/msg55478 adresindeki bilgiden anlıyoruz ki bu sorun aslında doğrudan Python’la ilişkili değil…Yine de Python’daki Türkçe sorununun büyük ölçüde halledilmiş olması hepimiz için sevindirici bir haber…
Yani bu sayede yorum satırından #-*- coding:utf-8 -*- satırını yazmamıza gerek kalmıyor öyle mi?
Evet, Python artık varsayılan olarak utf-8 kullanıyor. Ama şunu unutmamak lazım. Siz yazdığınız kodlarda her zaman utf-8 kullanmak istemeyebilirsiniz. Mesela bazı terminallerin utf-8 ile sorunu olabilir, bazı metinler utf-8 ile kodlandığında düzgün görünmeyebilir, utf-8 yerine iso8859-9 veya cp1254 kullanmak isteyebilirsiniz vb… Ama eğer tabii ki programınızı utf-8 ile kodlayacaksanız o satırı yazmanıza gerek yok…