Avatar ·

Por qué en Rust convertir la primera letra de una cadena a mayúscula es una tarea tan no trivial

¡Hola, colegas! Recientemente comencé a aprender Rust, viniendo de Python y JavaScript. Allí todo es simple: `"hello".capitalize()` o `str[0].toUpperCase() + str.slice(1)`. Pero en Rust me encontré con que incluso una operación tan básica como hacer mayúscula la primera letra de una cadena requiere bailar con la más fea. Escribí este código: ```rust fn capitalize_first(s: &str) -> String { let mut chars = s.chars(); match chars.next() { Some(first) => first.to_uppercase().to_string() + chars.as_str(), None => String::new(), } } fn main() { println!("{}", capitalize_first("hello")); // quiero "Hello" println!("{}", capitalize_first("привет")); // quiero "Привет" } ``` A primera vista, todo funciona. Pero cuando intenté procesar la cadena `"straße"` (palabra alemana para "calle"), obtuve `"Straße"`, aunque esperaba `"Straße"` (en alemán, ß al capitalizarse se convierte en SS, ¡y la longitud de la cadena cambia!). Y si paso un emoji o caracteres acentuados...