C/C++ kafa bulandıran unicode problemleri ve türkçe karakter çıkmazları dava no:1

Napcaz

Katılımcı Üye
28 Nis 2019
767
765
Cudi
C++:
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>

int main() {
    setlocale(LC_ALL, "Turkish");//bunun tam manasıyla ne iş yaptığını çözemedim ama bunsuz anladığım kadarıyla türkçe karakter setlerine erişemiyoruz.
    int key_code;//herhangi bir ascii karakter kodunu yazarak başlayın
    while (TRUE) {
        scanf_s("%d", &key_code);
        wchar_t ş = L'ş';//gıcık türkçe karakterlerden birini değişkene verin.(Aklınıza gelmediyse 'A'=>65)
        wprintf(L" c_key_code_char:%c - d_key_code_int:%d - c_'ş'_char:%c - d_'ş'_int:%d", key_code, key_code, ş, L'ş');
        //'ş' harfinin kod noktası 351 bu unicode ile ifade edilen bütün karakterlere belli bir skala içerisinden verilen sayıları ifade eder
        //vikipedia da küçük bir araşırma sonucu bu kavramsal meseleyi halledebilirsiniz. ş harfinı görebileceğiniz üzere başarılı bir şekilde bastırdık
        //ama c yi daha dün öğrenen birisinin son derecede kafasını karıştırıcak bir durumdur "klasik" fonksiyonlarla türkçemizin 'ş' güzelim harfi ş yi bastıramamak.
        //Aşağıda kendi kafamı karıştıran kısmı bir nevi kendi çözüm adımlarımla elde ettiğim tecrübeyi ve neticemi sizle paylaştım umarım benim gibi ruh hastalarının
        //ilgisini çeken bir dava olur içinizi daraltan yazılım problemlerinden biri olan unicode meselesini karakter kodlamasını vesaiyere bu örnek kod ve sorun-çözüm
        //ilişkisi içerinde bir nebzede olsa rahatlatır ben şahsen çok rahatladım umarım konuştuğum dili anlarsınız eğer oralarda biyerde benim gibi biri varsa o anlayacaktır;) hayırlı geceler...
    }
}
//`ş` harfi utf16 ile 2 byte lık bir harf ve onu hem bastırmak hemde tutmak için bu fazladan byte ı değerlendirebilecek bileşenlere
//ihtiyacımız var wchar_t windows için (galiba) 16 bit lik değer tutmaya yarıyor wpirntf ise bu 16 bitlik harfi yorumluyabilecek
//özellikte bir fonksiyon işte bütün bunlar sayesinde istediğimizi elde edebiliyoruz eğer normal printf kullansak 'ü' 'Ü' gibi
//tek byte utf16 ile ifade edilen harfleri de bastırabiliriz ama 2 byte için wprintf şart, dava kapandı.

//DEVAM EDEN SORUNSAL: Hala neden printf ile 'ş' harfini bastırmaya çalıştığım zaman byte larından sonuncusunu yani '_' karakterini değilde
//ilk byte ı basmadını bilmiyorum açıkçası detay gibi geldi ilk bakışta da aklıma pek mantıklı bir şey gelmeyince (little endian, big endian ile mi alakalı acaba)
//bende düşünmeyi şimdilik bıraktım.
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.