Ce face u8::to_ascii_uppercase
b.to_ascii_uppercase() returnează varianta mare a literelor a–z și lasă orice alt octet exact cum este (cifre, semne, octeții caracterelor non-ASCII). to_ascii_lowercase() face invers, iar make_ascii_uppercase() modifică octetul pe loc.
Aceleași metode există pe [u8], str și String (make_ascii_uppercase, to_ascii_uppercase, eq_ignore_ascii_case). Pentru texte românești cu diacritice, folosește to_uppercase() pe str, care cunoaște tot Unicode-ul: ș devine Ș.
Ce returnează
to_ascii_uppercase/to_ascii_lowercase: un u8 nou. make_ascii_uppercase: nimic.
Exemple
Exemplul 1: Octet cu octet
fn main() {
for b in [b'a', b'Z', b'7', b'-'] {
println!("{:?} -> {:?}", b as char, b.to_ascii_uppercase() as char);
}
let mut cod = *b"ro-is";
cod.make_ascii_uppercase();
println!("{}", String::from_utf8_lossy(&cod));
}
Rezultat
'a' -> 'A'
'Z' -> 'Z'
'7' -> '7'
'-' -> '-'
RO-IS
Exemplul 2: Diacriticele rămân neschimbate
Variantele ASCII nu ating literele românești; to_uppercase() pe str le transformă corect.
fn main() {
let oras = "iași";
let ascii = String::from_utf8(oras.bytes().map(|b| b.to_ascii_uppercase()).collect()).unwrap();
println!("ASCII: {ascii}");
println!("Unicode: {}", oras.to_uppercase());
println!("aceleași, fără diferență de litere mari/mici: {}", "IASI".eq_ignore_ascii_case("iasi"));
}
Rezultat
ASCII: IAșI
Unicode: IAȘI
aceleași, fără diferență de litere mari/mici: true
Greșeli frecvente
- Folosești
to_ascii_uppercasepentru texte în română:ă, â, î, ș, țrămân mici. Foloseștestr::to_uppercase(). - Încerci să faci majuscule scăzând 32 din fiecare octet: strică cifrele, semnele și diacriticele. Metodele ASCII verifică singure dacă octetul este literă.
Comenzi înrudite
u8: Întreg fără semn pe 8 biți (0-255): tipul unui octet, folosit pentru date binare și text ASCII/UTF-8.u8::is_ascii_digit: Verifică dacă octetul este o cifră ASCII, de la b’0′ la b’9′.