Ce face char::len_utf8
Caracterele ASCII (litere englezești, cifre, semne obișnuite) ocupă 1 octet. Literele cu diacritice românești și majoritatea alfabetelor europene ocupă 2 octeți. Caracterele ca € și cele asiatice ocupă 3, iar emoji-urile 4.
Valoarea este utilă când calculezi poziții în octeți pornind de la caractere, de exemplu ca să sari peste caracterul găsit: poz + c.len_utf8(). Nu confunda cu size_of::<char>(), care este mereu 4 (cât ocupă un char separat în memorie).
Ce returnează
usize între 1 și 4.
Exemple
Exemplul 1: Dimensiuni pentru caractere diferite
fn main() {
for c in ['a', 'ă', 'ș', '€', '中', '🦀'] {
println!("{c}: len_utf8() = {}", c.len_utf8());
}
}
Rezultat
a: len_utf8() = 1
ă: len_utf8() = 2
ș: len_utf8() = 2
€: len_utf8() = 3
中: len_utf8() = 3
🦀: len_utf8() = 4
Exemplul 2: Textul de după primul caracter
fn fara_primul(s: &str) -> &str {
match s.chars().next() {
Some(c) => &s[c.len_utf8()..],
None => s,
}
}
fn main() {
println!("{}", fara_primul("Ștefan"));
println!("{}", fara_primul("Ana"));
}
Rezultat
tefan
na
Greșeli frecvente
- Presupui că fiecare caracter are 1 octet și tai cu
&s[1..]. Pe „Ștefan” programul se oprește cu panică.
Comenzi înrudite
char: Un singur caracter Unicode, scris între apostrofuri (‘ș’); ocupă mereu 4 octeți în memorie.String::len: Lungimea textului în OCTEȚI (nu în litere) și verificarea dacă textul e gol. Pentru litere: chars().count().str::char_indices: Parcurge caracterele împreună cu poziția lor în octeți: perechi (usize, char).