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 — локальная установка не требуется.
Все уроки этого курса
- String и &str
- Срезы
- Методы строк
- UTF-8 и символы