char::from_u32 în Rust

Creează un char din codul lui Unicode, dacă este valid; altfel returnează None.

Sintaxă
pub const fn from_u32(i: u32) -> Option<char>

Ce face char::from_u32

char::from_u32(0x0219) dă Some('ș'). Nu orice număr este un caracter valid: valorile peste 0x10FFFF și intervalul 0xD800–0xDFFF (rezervat pentru UTF-16) dau None.

Drumul invers este c as u32. Pentru un octet (u8) există conversia directă b as char sau char::from(b), care nu poate eșua (dă caracterele U+0000–U+00FF).

Parametri

Parametru Descriere
i Codul Unicode (numărul caracterului).

Ce returnează

Option<char>.

Exemple

Exemplul 1: Coduri valide și invalide

fn main() {
    for cod in [0x41, 0x0219, 0x021B, 0x20AC, 0xD800, 0x110000] {
        println!("{cod:#08X} -> {:?}", char::from_u32(cod));
    }
    println!("'ț' are codul {:#X}", 'ț' as u32);
}

Rezultat

0x000041 -> Some('A')
0x000219 -> Some('ș')
0x00021B -> Some('ț')
0x0020AC -> Some('€')
0x00D800 -> None
0x110000 -> None
'ț' are codul 0x21B

Exemplul 2: Literele mari ale alfabetului din coduri

fn main() {
    let litere: String = (0x41..=0x5A).filter_map(char::from_u32).collect();
    println!("{litere}");
    let romanesti = [0x102, 0xC2, 0xCE, 0x218, 0x21A];
    let s: String = romanesti.iter().filter_map(|&c| char::from_u32(c)).collect();
    println!("{s}");
}

Rezultat

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ĂÂÎȘȚ

Greșeli frecvente

  • Faci cod as char cu un u32: nu compilează (only `u8` can be cast as `char`, not `u32`). Folosește char::from_u32.

Comenzi înrudite

  • char: Un singur caracter Unicode, scris între apostrofuri (‘ș’); ocupă mereu 4 octeți în memorie.
  • char::to_digit: to_digit transformă o cifră (‘7’, ‘f’) în număr într-o bază dată; from_digit face invers. Ambele returnează Option.
  • char::len_utf8: Câți octeți ocupă caracterul când este scris în UTF-8, adică într-un String: între 1 și 4.
  • TryFrom: Conversii care pot eșua și returnează Result: u8::try_from(300) dă Err. Implementarea aduce și try_into().