CodeBlanks Logo Icon CodeBlanks

Rune ve UTF-8

Rune ile Unicode karakterleri ve UTF-8 kodlamasını öğrenirsin.

Rune ve UTF-8

UTF-8'de bir karakter 1 ile 4 bayt arasında yer kaplar: a 1, ç 2, € 3, emoji 4 bayttır. Karakter düzeyinde çalışmak için []rune ve unicode/utf8 kullanılır:

s := "çay ☕"
fmt.Println(len(s))                     // 8 bayt
fmt.Println(utf8.RuneCountInString(s))  // 5 karakter
r := []rune(s)
fmt.Println(string(r[0]))               // ç

unicode paketi

unicode paketi rune sınıflandırması yapar ve Türkçe harfleri doğru tanır:

for _, r := range "Ğ5 a!" {
    fmt.Println(string(r), unicode.IsLetter(r), unicode.IsDigit(r), unicode.IsUpper(r))
}

unicode.IsSpace, unicode.IsPunct, unicode.ToUpper gibi fonksiyonlarla metin analizi yapılır.

Uygulama Ters çevir

ters(s string) string fonksiyonunu []rune ile yaz ve ters("çiçek") sonucunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func ters(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

func main() {
    fmt.Println(ters("çiçek"))
}

Beklenen çıktı

keçiç

Soru ve cevaplar

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

1 "çay" metnini tersine çevirmek için neden <code>[]rune</code> kullanılır?

  • Daha kısa yazılır
  • Fark yoktur
  • Baytları ters çevirmek ç'nin iki baytını bozar Doğru cevap
  • []byte desteklenmez

Açıklama: ç iki bayttır; bayt düzeyinde ters çevirme geçersiz UTF-8 üretir. Rune'lar karakter bütünlüğünü korur.

2 Karakter say

Soru
n := utf8.____("ışık")  // 4
Cevap
n := utf8.RuneCountInString("ışık")  // 4

Açıklama: RuneCountInString string'deki karakter (rune) sayısını verir.

3 Karakter ve bayt sayısı

Kavram Anlamı
a 1 bayt
ç 2 bayt
€ 3 bayt
😀 4 bayt

Başlangıç bölümündeki tüm dersler