As an addition to Lucas's answer:
Rust strings handle both Unicode and UTF-8, but at different layers.
In Unicode, one lowercase character doesn't always map to a single uppercase character.
For example:
'ß' (German sharp S) becomes "SS" when uppercased.
This makes Rust's approach more intuitive and reliable by using iterators rather than returning a single character.