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...