@scg: char unicode değil, char bir bytelık tamsayı. dolayısıyla char* içine birer bytelara ayrılmış her şeyi koyabiliriz. buna utf-8 diziler de dahil.
şimdi diyelim ki editör (eclipse, notepad, visual studio vs.) utf-8 dosyayla çalıştığını biliyor olsun. sen 'ğ' ekleyince dosyaya utf-8'de 'ğ''ya karşılık gelen bytelar ekleniyor. burada 2 byte ama başka karakterler için 1, 3, 4, 5... de olabilir. editör bu iki byte'ı ekranda 'ğ' olarak gösteriyor ama dosyada orada iki byte var.
gcc için char datasının encodingi diye bişey yok. o sadece sayıları depoluyor. kaç byte girilmişse strlen o kadar dönüyor. strlen kullanma zaten, unicode için özel tasarlanmış bir string sınıfı kullan.
konsola yazarken de shell, utf-8 yazacağını biliyorsa byteları inceleyip 'ğ' karakteri basıyor.
grafik arayüz olayı içinse kullandığın framework (gtk, qt) verdiğin byte dizilerinin utf-8 olduğunu varsayıp ona göre işlem yapıyor.
microsoft'un derleyicileri de farklı çalışmıyor. daha önce utf-8 hazırladığım kodu derlediğimde sorun yaşamadım. arayüz için winapi yerine qt kullandım ama. winapi'de başına gelecek sıkıntılar şunlar olabilir:
- microsoft'un toolları (notepad dahil) utf-8 dosyaların başına byte order mark (bom) koyuyor. python filan sıkıntı çekiyor onu parse ederken. utf-8'de byte order diye bir şey olmadığı için çok saçma bir olay aslında.
- winapi için unicode utf-16 (wchar) demek. utf-16 portable değil, (byte order) space efficient değil, içinde sıfırlar var :/ utf-8 ise kat kat daha portable (orada gördüğün ı için kullanılan iki byte her yerde aynı)
- winapi dünyasında her şey (data, kod, dosya) ya unicode ya değil. her şeyi önceden bunu düşünüp tasarlaman gerekiyor. diğer yandan her ascii string aynı zamanda geçerli bir utf-8 string olduğu için ve utf-8 içinde '\0' baytı bulunmadığı için, utf-8 seven toollar kullandığında istemeden unicode compliant kodlar üretmiş oluyorsun.
- utf-8 gibi süpersonik bir teknolojiyi göz ardı edip ıskalarsan, herkes mersin'e giderken tersine gitmiş olursun :)
taa 2003'lerden sesleniyorum sana scg :)
http://www.joelonsoftware.com/articles/Unicode.html