Sobes.tech
Junior — Middle

Cum se determină dimensiunea în bytes ocupată de un singur caracter într-un șir de caractere?

sobes.tech AI

Răspuns de la AI

În Go, un șir (string) reprezintă o secvență de octeți în codificarea UTF-8. Pentru a determina câți octeți ocupă un caracter (o rune), trebuie să ținem cont că diferite caractere pot ocupa un număr diferit de octeți.

Dacă vrei să afli dimensiunea unui anumit caracter în octeți, poți converti șirul într-un slice de rune ([]rune) și să compari lungimea șirului original cu lungimea slice-ului de rune.

Exemplu:

package main
import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "Привет"
    for i, w := 0, 0; i < len(s); i += w {
        r, width := utf8.DecodeRuneInString(s[i:])
        fmt.Printf("Caracter: %c ocupă %d octeți\n", r, width)
        w = width
    }
}

Aici, utf8.DecodeRuneInString returnează rune-ul și numărul de octeți pe care îi ocupă. Astfel, se poate determina dimensiunea fiecărui caracter în octeți.