0Pricing
Learn Rust Coding · Урок

UTF-8 и символы

Работа с Unicode

«UTF-8 и символы» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Rust Strings Are UTF-8

Каждый String и &str в Rust закодирован в UTF-8. Это означает, что текст может содержать любой символ Unicode, а не только ASCII.

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

What Is UTF-8?

UTF-8 кодирует каждый символ Unicode с использованием от одного до четырех байтов. Символы ASCII используют один байт; символы с диакритическими знаками и эмодзи — больше.

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

Bytes vs Characters

Из-за многобайтовой кодировки len() возвращает количество байт, в то время как число символов может быть меньше.

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

The char Type Is Unicode

Тип char в Rust — это 4-байтовое значение, способное хранить любое скалярное значение Unicode, что значительно шире одного байта.

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

Iterating Characters

Используйте chars() для посимвольного перебора текста. Это позволяет корректно обрабатывать многобайтовые символы.

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

Why You Cannot Index by Number

Rust не позволяет использовать s[0] для строк. Поскольку символы имеют разный размер в байтах, индексация по одному числу была бы неоднозначной и небезопасной.

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

Getting the nth Character

Используйте метод итератора nth для получения символа по его позиции. Он возвращает Option.

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

Iterating Bytes

Если вам действительно нужны «сырые» байты, используйте bytes(), который возвращает значения u8.

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

Slicing on Byte Boundaries

Срезы строк используют байтовые индексы. Срез должен заканчиваться на границе допустимого символа, иначе программа завершится с ошибкой (panic).

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

char Methods

Тип char обладает полезными методами, такими как is_alphabetic, is_numeric и to_uppercase.

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

Counting Specific Characters

Используйте chars в сочетании с filter, чтобы подсчитать количество символов, соответствующих заданному условию.

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

Quick Check

Вспомните, почему длина строки может вас удивить.

Recap

UTF-8 и символы в Rust:

  • Строки представлены в кодировке UTF-8; символы занимают от 1 до 4 байт.
  • len() возвращает размер в байтах; chars().count() возвращает количество символов.
  • Нельзя обращаться к строке по индексу; используйте chars() или nth.
  • Срезы должны проходить строго по границам символов.
fn main() {
    let s = "sm\u{ee}le";
    println!("bytes {} chars {}", s.len(), s.chars().count());
    for c in s.chars() {
        print!("{} ", c);
    }
    println!();
}

Часто задаваемые вопросы

Урок «UTF-8 и символы» бесплатный?

Да — полный текст урока «UTF-8 и символы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «UTF-8 и символы»?

Работа с Unicode Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «UTF-8 и символы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. String и &str
  2. Срезы
  3. Методы строк
  4. UTF-8 и символы
← Назад к Learn Rust Coding