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/utf8rune'ları sayar, doğrular ve çözümler.unicodetek 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
- Runeler ve Baytlar
- strings Paketi İşlevleri
- strings.Builder
- Unicode ve utf8