Rune ve UTF-8
- Go kursu
- Başlangıç
- Ders 61/90
- 4 dk
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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
n := utf8.____("ışık") // 4
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 |