0Pricing
Go Academy · Ders

Unicode ve utf8

Çok baytlı metinleri işleyin

Unicode ve utf8, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Unicode Neden Önemlidir

Modern metin; aksanlar, emojiler ve Latin alfabesini kullanmayan yazı sistemleri içerir. Unicode, her karaktere kod noktası adı verilen bir sayı verir.

Go, dizeleri bu kod noktalarının değişken genişlikli kodlaması olan UTF-8 biçiminde saklar.

package main

import "fmt"

func main() {
    s := "héllo 世界"
    fmt.Println(s)
}

Karakter Başına Bayt Sayısı Değişir

UTF-8'de bir karakter 1 ila 4 bayt kullanır:

  • ASCII harfleri: 1 bayt.
  • Aksanlı Latin harfleri: genellikle 2 bayt.
  • CJK karakterleri: genellikle 3 bayt.
package main

import "fmt"

func main() {
    fmt.Println(len("a"))
    fmt.Println(len("é"))
    fmt.Println(len("世"))
}

unicode/utf8 Paketi

unicode/utf8 paketi kodlamayı anlar. utf8.RuneCountInString(s), len'den farklı olarak karakterleri doğru şekilde sayar.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "héllo"
    fmt.Println(len(s))
    fmt.Println(utf8.RuneCountInString(s))
}

UTF-8'i Doğrulama

Bir dizeyi işlemeden önce düzgün biçimli UTF-8 içerdiğini doğrulamak için utf8.ValidString(s) kullanın.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    fmt.Println(utf8.ValidString("héllo"))
    fmt.Println(utf8.ValidString(string([]byte{0xff, 0xfe})))
}

Bir Rune'u Çözümleme

utf8.DecodeRuneInString(s), ilk rune'u ve bu rune'un kaç bayt tükettiğini döndürür. Bu, bir dizede elle ilerlemenizi sağlar.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    r, size := utf8.DecodeRuneInString("世界")
    fmt.Println(string(r), size)
}

Range Sizin İçin Çözer

for range döngüsü UTF-8 çözümlemesini zaten yapar. Dizin, her adımda rune'un bayt boyutu kadar ilerler.

package main

import "fmt"

func main() {
    for i, r := range "a世b" {
        fmt.Println(i, string(r))
    }
}

unicode Paketi

unicode paketi tek tek rune'ları sınıflandırır. unicode.IsLetter ve unicode.IsDigit gibi işlevler bir karakter hakkında soruları yanıtlar.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    fmt.Println(unicode.IsLetter('A'))
    fmt.Println(unicode.IsDigit('7'))
    fmt.Println(unicode.IsSpace(' '))
}

Rune'a Göre Harf Durumunu Değiştirme

unicode.ToUpper ve unicode.ToLower, ASCII dışındaki pek çok harf de dahil olmak üzere tek tek rune'lar üzerinde çalışır.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    fmt.Println(string(unicode.ToUpper('a')))
    fmt.Println(string(unicode.ToLower('Z')))
}

Harfleri Güvenle Sayma

Farklı karakterler içeren metinlerde yalnızca harfleri saymak için paketleri birleştirin ve her rune'u doğru şekilde ele alın.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    count := 0
    for _, r := range "a1 b2 世!" {
        if unicode.IsLetter(r) {
            count++
        }
    }
    fmt.Println(count)
}

Rune'lara Göre Ters Çevirme

Metni güvenli şekilde ters çevirmek için baytları değil rune'ları ters çevirmelisiniz; aksi takdirde çok baytlı karakterler parçalanır.

package main

import "fmt"

func main() {
    runes := []rune("a世b")
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    fmt.Println(string(runes))
}

Hepsini Bir Araya Getirme

Hızlı bir özet aracı yazın: bayt uzunluğunu, rune sayısını ve metnin geçerli UTF-8 olup olmadığını bildirin.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "Go 世界!"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", utf8.RuneCountInString(s))
    fmt.Println("valid:", utf8.ValidString(s))
}

Hızlı Kontrol

Karakterleri saymanın doğru yolunu seçin.

Özet: Unicode ve utf8

Artık çok baytlı metinleri güvenle işleyebilirsiniz:

  • Go dizeleri UTF-8 kullanır; karakterler 1 ila 4 bayt yer kaplar.
  • unicode/utf8 rune'ları sayar, doğrular ve çözümler.
  • unicode tek tek rune'ları sınıflandırır ve harf durumlarını değiştirir.
package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "café 語"
    fmt.Println(utf8.RuneCountInString(s), "runes")
}

Sıkça Sorulan Sorular

“Unicode ve utf8” dersi ücretsiz mi?

Evet — “Unicode ve utf8” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Unicode ve utf8” dersinde ne öğreneceğim?

Çok baytlı metinleri işleyin Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Unicode ve utf8” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Runeler ve Baytlar
  2. strings Paketi İşlevleri
  3. strings.Builder
  4. Unicode ve utf8
← Go Academy Sayfasına Dön