CodeBlanks Logo Icon CodeBlanks

Özet - Unicode

  • C kursu
  • İleri seviye
  • Ders 66/83
  • 5 dk

UTF-8 ve wchar_t'yi birleştirerek bir çok dilli merhaba uygulaması yazarsın.

Özet - Unicode

Bu grupta ASCII ve UTF-8 farkını, wchar_t'yi, setlocale'i, mbstowcs'i ve UTF-8 kod çözücüyü öğrendin. Şimdi tümünü birleştirerek bir çok dilli merhaba uygulaması yazacaksın.

Program: bir ASCII dizeyi yazdırır, yereli "C" olarak kurar, strlen ile bayt sayısını ve mbstowcs ile geniş karakter sayısını hesaplar, üçünü birden yazdırır. Tüm çıktılar deterministiktir: "Merhaba" için bayt 7, geniş karakter 7.

Uygulama Çok dilli merhaba

const char *s = "Merhaba"; tanımla. printf("%s\n", s); ile yazdır. setlocale(LC_ALL, "C"); çağır. size_t mb = strlen(s); ve size_t wcs = mbstowcs(NULL, s, 0); hesapla. printf("bayt: %zu\n", mb); ve printf("wcs: %zu\n", wcs);.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

// "Merhaba" yazdır, yereli 'C' olarak kur
// strlen ile bayt, mbstowcs ile geniş karakter sayısını yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main(void) {
    const char *s = "Merhaba";
    printf("%s\n", s);
    setlocale(LC_ALL, "C");
    size_t mb = strlen(s);
    size_t wcs = mbstowcs(NULL, s, 0);
    printf("bayt: %zu\n", mb);
    printf("wcs: %zu\n", wcs);
    return 0;
}

Beklenen çıktı

Merhaba
bayt: 7
wcs: 7

Sonraki adımlar

Unicode ve çoklu dil temelini öğrendin. ASCII tek bayt, UTF-8 değişken, wchar_t geniş karakter saklar. setlocale ile yerel ayar kurarsın; mbstowcs ve wcstombs ile iki yönlü dönüşüm yaparsın.

İleri adımlar: mbrtowc ile yeniden başlatılabilir dönüşüm, ICU kütüphanesi ile tam Unicode desteği ve char32_t ile sabit genişlikte kod noktası depolama. UTF-8 kod çözücünü üç ve dört baytlı dizilere genişletebilirsin.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Çok baytlı dönüşüm öncesi hangi işlev çağrılmalı?

  • printf
  • setlocale Doğru cevap
  • strlen
  • malloc

Açıklama: setlocale olmadan mbstowcs davranışı tanımsızdır.

2 İşlevleri amacına eşle

Kavram Anlamı
strlen Bayt sayar
mbstowcs Geniş dize verir
setlocale Yerel kurar
decode_utf8 Kod noktası

İleri seviye bölümündeki tüm dersler