"Türkçe", Konuşur Gibi Kod Yazmak #4: Harf Harf Didikleme & Karakter Meselesi

in tr •  10 months ago 


Önceki Bölümlerde: #1: Giriş, #2: İlk adımlar, #3: Dosya Çağırma, adımlarına bakmıştk. Kaldığımız yerden devam ediyoruz.. Next.. Sonraki.. ;)


İlk, kodlamasını Türkçe olarak yazacağımız dosyamızı oluşturalım. Bunun için

Not Defterini açın.

Hey! Selam, nasılsın?

..yazın. Ve uzantısını otomatik .txt yapmaması için Kayıt Türü: Tüm Dosyalar olarak seçin, kaydedin.


 

Kullanım kolaylığı açısından,
Başlat > Cmd >
Cd şu klasör > cd bu klasör.. şeklinde uğraşmamak için, tar.py ve ornek.tr dosyalarının bulunduğu klasör seviyesine çıkın ve Shift'e basarken bu klasör üzerinde Sağ tıklayın.

Böyle yaptığımızda explorer menüsünde "Komut penceresini burada aç" seçeneği de gelecek ;)


Görüleceği üzere,
E:
cd Equinox
cd _Python
cd KendiDilim
cd v1
gibi tek tek yazmak durumunda kalmadık. Direk ilgili klasörde başladık.

O halde tar yazıp enterlayalım ve bizden dosya ismi beklesin


peki..
TaR az önce içine "Hey! Selam, nasılsın?" yazdığımız, ornek.tr dosyamızı çağırsın.


hadi bakalım..

What?! Bu da ne?


Hemen her yerde karşımıza çıkan, bazen saç baş yolduran Türkçeye karakterlerle ilgili hatalardan birisi. Bu tip hatalara genel olarak "ığşü hatası" diye bir isim mi versek acaba :)

Neyse ki UTF-8 olarak kaydetme şansımız var.

--UTF-8 derken? --Unicode Transformation Format'ın kısaltılmışı yani Unicode Dönüşüm Biçimi. --Himm.. Unicode? Üniversal kod? galiba. Da nasıl? --Unicode: (Evrensel Kod) Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standartıdır.
 

--İyi de her karakteri neden sayı ile ifade edelim ki? A harfi, A olsun işte.
--Olsun da şekerim, sen Google'a A yazıp aradığında, kablonun içinden A harfi mi gidiyor

--Elektrik/Elektron falandır herhalde giden.

--Elektrik gibi bir şeye "bak bu A harfi bu da B" diye nasıl anlatırsın.

--Anladığı dilden :) Elektrik var, Elektrik yok. 1-0. Mesela;
Var-Var-Yok-Var: 1 1 01 : A harfi
Var-Yok-Yok-Var: 1 0 0 1 : B harfi
olursa ortak anlaşma yolunu bulmuş oluruz ;)

Fakat ben B için böyle değil de daha farklı bir Var-Yok sıralaması seçebilirim. Keyif benim değil mi,
Var-Yok-Var-Var : 1 0 1 1 : B olsun diyebilirim.
Evet diyebilirim. Ama atıyorum Tukcell'in Avea'nın sunucuları bu sıralamayı Z olarak yorumluyorsa, yazdığım SMS karşı tarafa başka bir şey olarak gidebilir..

Operatörle anlaşıp şöyle diyebiliriz, bundan hepimiz şu sıralama şeklini esas alalım:

1 1 1 1 : A
1 1 1 0 : B
1 1 0 1 : C
1 1 0 1 : Ç
1 0 1 1 : D
1 0 1 0 : E
1 0 0 1 : F
1 0 0 0 : G

0 1 1 1 : Ğ
0 1 1 0 : H
0 1 0 1 : I
0 1 0 1 : İ
0 0 1 1 : J
0 0 1 0 : K
0 0 0 1 : L
0 0 0 0 : M

--Ee.. Var-Yok seçeneklerimiz bitti :)

--"O halde bize 4 bit yetmeyecek.. bunun küçük harfi, boşluğu, virgülü sayısı sayısı var, biz en iyisi bunu 8 bit yapalım ki M'de tıkanıp kalmadan 256 seçeneğimiz olsun" denilmiş.

Yani ASCII tablosu.
Sağ solda karşımıza çıkan ASCII dediğimiz şey; aslında çocukken 13121 yazarak, ACABA 'yı kast ettiğimiz şifreli
haberleşme şeklimizin, karşılıklar tablosundan çok farklı değil aslında.



Amma Velakin

Şu tabloya bir bakın hele..
Dünya toplamında kullanılan BAYA bi harf var.


Oysa bizim elimizde M'ye kadar kesmiyor deyip kullanmaya başladığımız ASCII içinde bile 256 karaktere yer var. Böyle olmaz. En iyisi Dünya üzerinde kullanılan bütün dillerin, bütün harfleri için bir tablo yapalım, kökten çözüm bulalım denilmiş.

Unicode Organizasyonu toplanmış. Yukarıdaki liste gibi bir standart çıkarmış.
--İyi de o zaman bu 8 bit [1 0 1 0 1 0 1 0] olamaz ki.
--Evet değil. Unicode bir saklama biçiminde her bir karakter için ayırmanız gereken yer 32 bit.

Eh 32 bit ama herkes için sorun çözüldü.



İnternet


Elektronik devreleri ve karakter setleri, kendi aralarında top çevirirken İnternet diye bir çıkar ve hayli popüler olur. Böyle olunca, bir karakter için 8 bit yerine 32 bit yani 8 GB yerine 32 GB veri birilerinin canını sıkar, hem harddiskte çok yer demek, hem yoğun ve yavaş bir trafik..

Bu kişiler; şimdilerde Google'ın kendi yeni programlama dili GO'yu geliştiren Rob Pike ve Ken Thompson'dır. Gayet zekice bir yöntemle, hem yine tonlarca harfle eşleşecek hem de 32 bit'lik Unicodu'u 8 bit'e dönüştürecek bir yöntem icat ederler:
Unicode Transformation Format : Unicode Dönüşüm Biçimi: UTF.

Sanırım biraz yukarıdaki kısa açıklama, şimdi daha yerli yerine oturdu ;)
İyi de nasıl yapıyorlar? diye merak edenler buradan dalışa geçebilir.
//SEO açısından, Google'ın neden utf-8 siteleri bir tık daha fazla sevdiği de anlaşılabilir ;)


Soo..
TaR'ımıza dönelim.
Madem Türkçe Karakter sorunu için Unicode veya UTF-8 çözüm sunuyor. Onların formatında kayıt yapalım.


ornek.tr
'yi açın ve Dosya>Fark Kaydet menüsü altından, yine Kayıt Türü: Tüm Dosyalar seçili iken,
Alt taraftan Kodlama: UTF-8 seçip öyle kayıt edin.


 

Ok. Şimdi yeniden konsola geçelim.



 

.. ve Nihayet!

diyecektik ama diyemeden kursağımızda kaldı.


 

--Şimdi ne oldu?

Daha içeriden bakalım...

Not ve Sub diye iki klasör oluşturun.
Not Defteri açın, yeni bir dosya içinde sadece <strong>ğ yazıp, Not klasörü içine ğ.txt adıyla kayıt edin.
SublimeText açın, yeni bir dosya içinde sadece <strong>ğ yazıp, Sub klasörü içine ğ.txt adıyla kayıt edin.

Text dosyası olmalarına rağmen, bunları Sağ tıklayıp, Birlikte Aç diyerek IrfanView ile açalım. (ilk defa irfanview kuracaksanız, resim görüntüleme programı olduğunu, kurarken seçtiğiniz ayarlara, kendini varsayılan resim gösterici olarak atayabileceğini akılda tutun)

Ardından View > Show HEX view seçelim.


 

 

Görüleceği üzere, Note pad bizim istediğimiz şekilde kayıt yapmamış. Bize doğru gösteren SublimeText ile yaptığımız kayıt lazım.

SublimeText açalım, yeni bir dosya içine
Hey! Selam, Nasılsın?
yazıp, kayıt edelim.

ve yine konsola geçelim.



..vee


Yey!
İki tane I harfi içeren bir dosyayı TaR ile çağırdık ve tüm harflerini elden geçirip, çıktı olarak sunduk.

En başta, "SublimeText ile ornek.tr oluştur" deseydin, bu kadar uğraşmazdık" demiyorsunuzdur umarım.

Kendi Programlama Dilimizi yazacaksak, Hele ki bu TÜRKÇE olacaksa, ASCII, UTF vb Karakter Setleri ve Karakter Kodlamaları hatta RAM'da kaç byte veri tutulacağı gibi bilgileri de öğrenmek sanki hiç fena değil ;)


Posted from my blog with SteemPress :

http://murattatar.xyz/turkce-konusur-gibi-kod-yazmak-4-harf-harf-didikleme-karakter-meselesi/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Geçmişe dönüş mü olsaydı başlık acaba? :)

·

Neden olmasın :)