Learn Rust Coding · Lección

UTF-8 y Chars

Gestión de Unicode

Lección 4 de 413 pasos

UTF-8 y Chars es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.

Las cadenas de Rust son UTF-8

Cada String y &str de Rust está codificado como UTF-8. Esto significa que el texto puede incluir cualquier carácter Unicode, no solo ASCII.

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

¿Qué es UTF-8?

UTF-8 codifica cada carácter Unicode usando de uno a cuatro bytes. Los caracteres ASCII usan un solo byte; las letras acentuadas y los emojis usan más.

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

Bytes frente a caracteres

Debido a la codificación multibyte, len() devuelve el número de bytes, mientras que el número de caracteres puede ser menor.

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

El tipo char es Unicode

Un char de Rust es un valor de 4 bytes que puede contener cualquier valor escalar Unicode, mucho más que un solo byte.

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

Iteración sobre caracteres

Use chars() para recorrer el texto carácter por carácter. Esto gestiona correctamente los caracteres multibyte.

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

Por qué no puede indexar por número

Rust no permite usar s[0] en una cadena. Como los caracteres pueden tener distintos tamaños en bytes, indexar con un solo número sería ambiguo e inseguro.

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

Obtención del carácter en la posición nth

Use el método de iterador nth para obtener un carácter por posición. Devuelve un Option.

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

Iteración sobre bytes

Cuando realmente necesite los bytes sin procesar, use bytes(), que produce valores u8.

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

Slicing en límites de bytes

Los slices de cadenas usan índices de bytes. El slicing debe terminar en un límite de carácter válido o el programa entra en pánico.

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

Métodos de char

El tipo char tiene métodos prácticos como is_alphabetic, is_numeric y to_uppercase.

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

Conteo de caracteres específicos

Combine chars con filter para contar los caracteres que cumplen una condición.

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

Comprobación rápida

Recuerde por qué la longitud de una cadena puede resultar sorprendente.

Resumen

UTF-8 y chars en Rust:

  • Las cadenas son UTF-8; los caracteres usan de 1 a 4 bytes.
  • len() devuelve bytes; chars().count() devuelve caracteres.
  • No puede indexar una cadena por número; use chars() o nth.
  • Los slices deben quedar en límites de carácter.
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 para empezar

Aprende Rust con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
39
Lecciones
144

Preguntas frecuentes

¿La lección «UTF-8 y Chars» es gratis?

Sí — el texto completo de «UTF-8 y Chars» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.

¿Qué aprenderé en «UTF-8 y Chars»?

Gestión de Unicode Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn Rust Coding?

No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «UTF-8 y Chars»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?

Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. String frente a &str
  2. Slices
  3. Métodos de String
  4. UTF-8 y Chars
← Volver a Learn Rust Coding