Thread overview
D.ershane Eşleme Tabloları
Jul 18, 2012
erdem
Jul 18, 2012
erdem
Jul 18, 2012
Kadir Can
Jul 18, 2012
erdem
Jul 18, 2012
Kadir Can
Jul 18, 2012
erdem
July 18, 2012
import std.stdio;
import std.string;

void main()
{
   string[string] renkler = [ "siyah"   : "black",
                              "beyaz"   : "white",
                              "kırmızı" : "red",
                              "yeşil"   : "green",
                              "mavi"    : "blue",
                              ];

   writeln("Ben bu ", renkler.length,
           " rengin İngilizcelerini öğrendim: ",
           renkler.keys);

   write("Haydi sorun: ");
   string türkçesi = chomp(readln());

   if (türkçesi in renkler) {
       writefln("İngilizcesi \"%s\"", renkler[türkçesi]);

   } else {
       writeln("Onu bilmiyorum.");
   }
}

Sanırım renklerin ingilizceleri soran program istediğimiz gibi çalışmıyor. Şöyle ki Türkçe karakter içeren bir renk girdiğimizde bilmiyorum diyor.

Alıntı:

>

Ben bu 5 rengin İngilizcelerini öğrendim: ["yeşil", "beyaz", "kırmızı", "siyah", "mavi"]
Haydi sorun: 'yeşil'
Onu bilmiyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Hımm maalesef Türkçe karakterler olan renkleri tanımadığı için dizgi kodlarını yazdıramadım. Ama örneğin beyaz için çıktı şu şekilde:

Alıntı:

>

Ben bu 5 rengin İngilizcelerini öğrendim: ["yeşil", "beyaz", "kırmızı", "siyah", "mavi"]
Haydi sorun: beyaz
01100010 (98)
01100101 (101)
01111001 (121)
01100001 (97)
01111010 (122)
İngilizcesi "white"

Alıntı:

>

C:\Users\Erdem\Desktop\dcalisma>test
Ben bu 5 rengin İngilizcelerini öğrendim: ["yeşil", "beyaz", "kırmızı", "siyah", "mavi"]
Haydi sorun: mavi
01101101 (109)
01100001 (97)
01110110 (118)
01101001 (105)
İngilizcesi "blue"

Windows ülkesinde UTF8'in ikinci sınıf vatandaş olduğu söyleniyor. Sanırım stackoverflow'da okumuştum :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Ben de bir yerde Windows'un UTF8 karakterleri doğruokuduğunu, ancak ekrana yazarken sıkıntı çıkardığını okumuştum.
chomp() kullanmayınca düzgün çalışıyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Kod sayfasını değiştirince UTF8 karakterler doğru yazılıyor; ama okumada sıkıntı oluyor.
Erdem; bir de kod sayfası değiştirmeden ve chomp() kullanmadan dener misin?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Alıntı (acehreli):

>

Alıntı (erdem):

>

Türkçe karakterler olan renkleri tanımadığı için dizgi kodlarını yazdıramadım.

Peki ne oluyor? Program yeni eklediğimiz foreach satırına geliyor helhalde, değil mi? O satıra geldiğinde 'türkçesi' değişkenini boş olarak mı görüyorsun? Değilse içinde kodların yazdırılması gerek. (?)

Hiç kod sayfasını değiştirmezsek şu şekilde oluyor.

Alıntı:

>

Ben bu 5 rengin ─░ngilizcelerini ├Â─şrendim: ["ye┼şil", "beyaz", "k─▒rm─▒z─▒", "
siyah", "mavi"]
Haydi sorun: yeşil
yeşil
01111001 (121)
01100101 (101)
10011111 (159)
01101001 (105)
01101100 (108)
Onu bilmiyorum.

Ama kod sayfasını chcp ile UTF-8 kullanacak şekilde değiştirdiğimizde türkçesi değişkeninin boş olduğunu görüyoruz.

Alıntı:

> >

chcp 65001
Etkin kod sayfası: 65001

dcalisma>test
Ben bu 5 rengin İngilizcelerini öğrendim: ["yeşil", "beyaz", "kırmızı", "siyah",
"mavi"]
Haydi sorun: yeşil

Onu bilmiyorum.

Alıntı (acehreli):

>

Bir de chomp'tan şüphelenelim bakalım. readln()'ı bir ara değişken olarak okuyup onun da kodlarını yazdırır mısın?

Ali bey bu dediğinizi tam anlamadım. Ama Kadir Can'ın dediği gibi chomp()'u kaldırıp denedim. O şekilde de ekrana gene boş yazıyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Denedim ama bu sefer *türkçesi *değişkeni yeşil olarak gözüküyor. Ama tabi 'ye┼şil' gibi bir değer olduğu için program gene doğru çalışmıyor. Bir de örneğin benim yazdığım kaynak kod da UTF-8 kodlaması kullanıyor. Acaba ondan kaynaklanıyor olabilir mi diye bir düşünce geldi.

Kişisel düşüncem artık Digital Mars bu kodlama olayını çözmeli. Anladığım kadarıyla Windows'un konsolu ISO-8859-9 ya da Windows-1254 kodlamasını kullanıyor. Örneğin C# ya da Borland C ile bir kod yazdığınızda konsolda karakterler doğru olarak gösteriliyor.

Bu gün hatta Github'a da kullandıkları kod renklendirmesi eklentisinin Türkçe karakterleri hata kodu olarak gördüğünü ve kırmızı olarak gösterdiğini, mümkünse düzeltmelerini rica ettim :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Önceki mesajlarında konsolunun UTF-8 olmadığından şüphelenmiştim. Programı şöyle değiştirip dizgi içinde hangi kodlar bulunduğuna bakar mısın:

// ...
   string türkçesi = chomp(readln());
   foreach (ubyte kod; türkçesi) {
       writefln("%08b (%s)", kod, kod);
   }
// ...

Bendeki çıktısı şöyle:

'Ben bu 5 rengin İngilizcelerini öğrendim: ["yeşil", "kırmızı", "beyaz", "siyah", "mavi"]
Haydi sorun: yeşil
01111001 (121)
01100101 (101)
11000101 (197)
10011111 (159)
01101001 (105)
01101100 (108)
İngilizcesi "green"
'

UTF-8 kodlamasına göre ilk biti 0 olan karakterler ASCII'deki ile aynı oluyorlar. 11 ile başlayanlar iki bayttan oluşan bir Unicode karakterinin ilk kodu oluyor ve 10 ile başlayan da son kodu oluyor (yukarıdaki ikisi ş'yi temsil ediyorlar).

Benim anladığım bu... (?) Senin çıktınla benimki arasında başka bir fark daha var: eşleme tablosunun elemanları farklı sıradalar. Bunun nedenini anladım: 64 bite ile 32 bit derleme arasında farklı oluyormuş. Bizim için önemli olmamalı...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Alıntı (erdem):

>

Türkçe karakterler olan renkleri tanımadığı için dizgi kodlarını yazdıramadım.

Peki ne oluyor? Program yeni eklediğimiz foreach satırına geliyor helhalde, değil mi? O satıra geldiğinde 'türkçesi' değişkenini boş olarak mı görüyorsun? Değilse içinde kodların yazdırılması gerek. (?)

Bir de chomp'tan şüphelenelim bakalım. readln()'ı bir ara değişken olarak okuyup onun da kodlarını yazdırır mısın?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 18, 2012

Şimdi araştırınca Windows'un Unicode desteği konusunda çok hataları olduğu ile ilgili bilgiler görüyorum (en azından konsolda).

Alıntı (erdem):

>

Digital Mars bu kodlama olayını çözmeli.

Geleneksel olarak programların giriş ve çıkış akımları char temelli olduğundan UTF-8 çok uygun bir kodlama. Üstelik ASCII char dizileri de otomatik olarak UTF-8 kodlaması oluyor.

O açıdan Digital Mars'ın seçimi en doğrusu. Yalnızca extended ASCII yapsalar yalnızca 256 harf destekleyebilirlerdi. wchar veya dchar seçseler bu sefer endianness sorunları olurdu.

Alıntı:

>

Anladığım kadarıyla Windows'un konsolu ISO-8859-9 ya da Windows-1254 kodlamasını kullanıyor. Örneğin C# ya da Borland C ile bir kod yazdığınızda konsolda karakterler doğru olarak gösteriliyor.

Çünkü onlar Unicode'u desteklemiyorlar, değil mi? O programlar içindeki "yeşil"i Türkiye'deki bir Windows konsolunda doğru görüyorsak başka bir ülkedeki konsolda farklı görürüz.

Unicode bu gibi sorunları ortadan kaldırıyor ama Windows'un da desteklemesi gerek...

Alıntı:

>

düzeltmelerini rica ettim :-)

Teşekkür! :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]