June 22, 2020

Bende ilk baslarda utf-32 yi utf-8 den daha karisik bir format olarak dusunuyordum. Cunku 32 > 8 fakat utf8 de karakterlerin boyutlari belli degil bazen 1 byte bazen 4 byte olabiliyorlar karakterden karaketere degisiyot. O yuzden index atlama-ziplamali araliklar operasyonlari utf8 ile calismayabiliyorlar. utf-32 de her zaman 4 btye en basit karakterler bile atiyorum sayilar "0" sayisi bile 4 byte cok buyuk israf aslinda ama 4 byte sabit olunca hoplayip siplayabiliyoruz cunku degismiyor. Utf8 basit karakterleri 1 byte olarak tutuyor bazi karakterlerde 2,3 veya 4 byte olabiliyor. Amac daha az yer kaplamasi. Fakat bu biraz karistirabiliyor ortaligi.

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

June 22, 2020

Valla is yerinde isi gucu biraktam konsol'dan unicode okumaya calisiyorum son 30 dakkadir :) beceremedim.

Yani su cok guzel calisiyor

https://run.dlang.io/is/ojLryK

import std.stdio : writeln;

void main() {
   auto temp = "\u2764 Merhaba \u2764";
   writeln(temp);
}

Fakat konsoledan nasil verebilirim bu inputu bulamadim bir turlu

Ben sunun calismasini beklerdim :

void main()
{
   char[] buf;
   while (readln(buf))
   {
       write( buf.to!dstring() );
   }
}

Fakat:\u2764 Merhaba \u2764
yaziyom bana geriye
\u2764 Merhaba \u2764
yaziyor :)

Bu unicodelari soyle sitelerden bulabilirsin bu arada https://graphemica.com/%E2%9D%A4

Neyse baya birsey denedim sunu filanda denedim

void main()
{
char[] buf;
while (readln(buf))
{
int i = 0;
auto decodedList = buf.map!( a=> a.decode(i) );

   write( decoded );

}

}

yok calistiramadim bir turlu.

Ali Abi yardim edebilirmisin

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

June 22, 2020

Alıntı (kerdemdemir):

>

Bence senin windows daki ortaminda bir sorun var "merhaba dunya" yazdirabiliyormusun. Belkide simdi windows'a cok takilmasan da olur ne dersin?

Erdem

Sevgili Erdem kardeşim öncelikle ilgin için teşekkür ederim.
Windows ortamımda bir sıkıntı yok çünkü bir çok D programını derleyip çalıştırıyorum zaten. Ayrıca Linux ortamında kod çalışıyor! orada bir sıkıntı yoktu zaten. Genelde Linux kullanmaya başladım neredeyse evde sürekli Linux kullanıyorum ve iyice ısındım da Linuxa :blush:

Bu arada utf-8 utf-32 kod düzenleri hakkında iyice bilgi sahibi oldum. Robinson Hocanın kitabında bu bölümü iyice ve kavraya kavraya okudum gayet net anlatılıyor. Tekrar teşekkürler..

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

June 22, 2020

Ali hocam bazan bu dünyadan olmadığını düşünüyorum :-D

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

June 22, 2020

Antrenmana devam :-D

import std.stdio;
import std.uni : byCodePoint;

dstring renkler = "♠♡♢♣";
dstring sayılar = "23456789JQKA";
char[] dizi;

void main() {
foreach (renk; renkler) {
   foreach (sayı; sayılar) {
     write(renk,sayı," ");
     dizi~=renk;
     dizi~=sayı;
   }
 }
}

Şimdi Ali hocam sizinki kadar profesyonel olmasa da acemice bir yazım ile bu kodlar benim eğitimime yardımcı oluyor ancakkkk!! madem ki;

dstring renkler ve sayılar : utf-32
char[] : utf-8

ise

'dizi~=renk;
dizi~=sayı;'
bu durumda nasıl oluyorda utf-32 bir kod utf-8 koda dizilerde ekleniyor ?

Aslında konuyu iyi anladığımı umuyorum ama bu sorularla bazan çok saçma bir düşünce ve soru mu soruyor diye kendime kızmıyor da değilim.

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

June 22, 2020

Alıntı (kerdemdemir):

>

Fakat konsoledan nasil verebilirim bu inputu bulamadim bir turlu

Yani şu dizgi: "❤ Merhaba ❤". Öncelikle D'de (ve C'de ve C++'ta) konsol diye bir kavram olmadığını hatırlamak gerek. Bu dillerin programları platformdan bağımsız olarak stdin ve stdout ile etkileşirler.

Linux konsolları zaten UTF-8 kullandıklarından hiçbir sorun yok. Programı çalıştırıp konsola "❤ Merhaba ❤" yazınca program doğru çalışıyor. Buradaki sorun, konsola o karakterleri yerleştirmek:

  • Özel bir konsolda bir kalp tuşu olabilir

  • Herhangi bir ortamda kopyalayıp konsola yapıştırılabilir; konsol o karakterleri programın stdin'ine aktaracaktır. (Yani, o dizgiyi konsola kopyala; tamam! :) )

  • Başka bir programın stdout'u bizim programın stdin'ine bağlanabilir:
    '
    $ echo '❤ Merhaba ❤' | ./deneme
    '

O da çalışıyor.

Windows'un konsolları UTF-8 olmadıklarından önce 'code page'i ayarlamak gerekiyor. (Bu sitede "65001" diye aratırsanız yararlı olacak.)

Coşkun, klavye'de olmayan karakterleri bir yerden kopyalamak dışında Erdem'in yaptığı gibi kodları da yazılabilir. Hatırlatmak için şurada "Karakterler" başlığına bakılabilir:

http://ddili.org/ders/d/hazir_degerler.html

Ali

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

June 22, 2020

dizi'nin elemanları char olduklarından ~= işlemleri dchar'dan gerektiği kadar char'a dönüştürüyorlar. (Yani UTF-32'den UTF-8'e). Karaktere bağlı olarak 1, 2, 3, veya 4 char olabilir.

Bunların hepsini aşağıdaki gibi bir işlevle görüntüleyebilirsiniz:

import std.stdio;
import std.uni : byCodePoint;

dstring renkler = "♠♡♢♣";
dstring sayılar = "23456789JQKA";
char[] dizi;

void baytlarınıGöster(const(char)[] dizi) {
 foreach (i, c; dizi) {
   import std.ascii;
   import std.format;

   writefln!"%s: %02x%s"(i,
                         cast(ubyte)c,
                         (isPrintable(c)
                          ? format!" %s"(c)
                          : ""));
 }
}

void main() {
foreach (renk; renkler) {
   foreach (sayı; sayılar) {
     write(renk,sayı," ");
     dizi~=renk;
     dizi~=sayı;
   }
 }

writeln();
baytlarınıGöster(dizi);
}

'
0: e2 // <-- Maça 3 adet UTF-8 olarak kodlanmış
1: 99
2: a0
3: 32 2 // <-- dchar iken 4 bayt olan '2' ise tek UTF-8 olarak kodlanmış
[...]
'
Ali

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

1 2
Next ›   Last »