Lær at programmere i Rust · Lektion

UTF-8 og chars

Håndtering af Unicode

Lektion 4 af 413 trin

UTF-8 og chars er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Rust-strenge er UTF-8

Alle Rust-String- og &str-værdier er kodet som UTF-8. Det betyder, at tekst kan indeholde alle Unicode-tegn, ikke kun ASCII.

fn main() {
    let s = String::from("caf\u{e9}");
    println!("{}", s);
}

Hvad er UTF-8?

UTF-8 koder hvert Unicode-tegn med én til fire bytes. ASCII-tegn bruger én byte; bogstaver med accenter og emoji bruger flere.

fn main() {
    let ascii = "A";          // 1 byte
    let accent = "\u{e9}";    // 2 bytes (e-acute)
    println!("{} bytes vs {} bytes", ascii.len(), accent.len());
}

Bytes sammenlignet med tegn

På grund af kodning med flere bytes returnerer len() bytes, mens antallet af tegn kan være mindre.

fn main() {
    let s = "caf\u{e9}";
    println!("bytes {}", s.len());
    println!("chars {}", s.chars().count());
}

Typen char er Unicode

En Rust-char er en værdi på 4 bytes, der kan indeholde enhver Unicode-skalærværdi, langt mere end en enkelt byte.

fn main() {
    let letter = 'Z';
    let accented = '\u{f1}'; // n with tilde
    println!("{} {}", letter, accented);
}

Iteration over tegn

Brug chars() til at gennemgå tekst tegn for tegn. Det håndterer tegn med flere bytes korrekt.

fn main() {
    let s = "a\u{e9}z";
    for c in s.chars() {
        println!("{}", c);
    }
}

Hvorfor du ikke kan indeksere med et tal

Rust tillader ikke s[0] på en streng. Fordi tegn kan have forskellig byte-størrelse, ville indeksering med et enkelt tal være tvetydig og usikker.

fn main() {
    let s = "hello";
    // let c = s[0]; // error: cannot index a str
    let first = s.chars().next().unwrap();
    println!("{}", first);
}

Hentning af det n-te tegn

Brug iterator-metoden nth til at hente et tegn på en bestemt position. Den returnerer en Option.

fn main() {
    let s = "abcdef";
    let third = s.chars().nth(2);
    println!("{:?}", third);
}

Iteration over bytes

Når du virkelig har brug for rå bytes, skal du bruge bytes(), som giver u8-værdier.

fn main() {
    let s = "AB";
    for b in s.bytes() {
        println!("{}", b);
    }
}

Slicing ved bytegrænser

Streng-slices bruger byteindeks. En slice skal begynde og slutte ved en gyldig tegngrænse, ellers går programmet i panik.

fn main() {
    let s = "hello";
    let part = &s[0..3]; // valid ASCII boundary
    println!("{}", part);
}

char-metoder

Typen char har praktiske metoder som is_alphabetic, is_numeric og to_uppercase.

fn main() {
    let c = 'k';
    println!("alpha {} numeric {}", c.is_alphabetic(), c.is_numeric());
    println!("upper {}", c.to_uppercase());
}

Optælling af bestemte tegn

Kombinér chars med filter for at tælle tegn, der matcher en betingelse.

fn main() {
    let s = "banana";
    let a_count = s.chars().filter(|&c| c == 'a').count();
    println!("a appears {} times", a_count);
}

Hurtigt tjek

Husk, hvorfor en strengs længde kan overraske dig.

Opsummering

UTF-8 og chars i Rust:

  • Strenge er UTF-8; tegn bruger 1 til 4 bytes.
  • len() giver antallet af bytes; chars().count() giver antallet af tegn.
  • Du kan ikke indeksere en streng med et tal; brug chars() eller nth.
  • Slices skal falde på tegngrænser.
fn main() {
    let s = "sm\u{ee}le";
    println!("bytes {} chars {}", s.len(), s.chars().count());
    for c in s.chars() {
        print!("{} ", c);
    }
    println!();
}
Gratis at komme i gang

Lær Rust med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “UTF-8 og chars” gratis?

Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “UTF-8 og chars”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “UTF-8 og chars”?

Håndtering af Unicode Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær at programmere i Rust?

Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “UTF-8 og chars”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?

Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. String kontra &str
  2. Slices
  3. String-metoder
  4. UTF-8 og chars
← Tilbage til Lær at programmere i Rust