Sobes.tech
Junior — Middle

Jak určit velikost v bajtech, kterou zabírá jeden znak v řetězci?

sobes.tech AI

Odpověď od AI

V jazyce Go představuje řetězec (string) posloupnost bajtů v kódování UTF-8. Abychom zjistili, kolik bajtů zabere jeden znak (runa), je třeba vzít v úvahu, že různé znaky mohou zabírat různý počet bajtů.

Pokud chcete zjistit velikost konkrétního znaku v bajtech, můžete převést řetězec na řez run ([]rune) a porovnat délku původního řetězce s délkou řezů run.

Příklad:

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("Znak: %c zabírá %d bajtů\n", r, width)
        w = width
    }
}

Zde utf8.DecodeRuneInString vrací runu a počet bajtů, které zabírá. Tímto způsobem lze určit velikost každého znaku v bajtech.