我有一个包含单个char
的变量。我想将此char
转换为大写。但是,to_uppercase
函数会返回rustc_unicode::char::ToUppercase
结构而不是char
。
答案 0 :(得分:17)
ToUppercase
是Iterator
,可能会产生多个char
。这是必要的,因为一些Unicode字符由多个“Unicode标量值”(Rust char
表示)组成。
一个很好的例子是所谓的ligatures。试试这个例子(on playground):
let fi_upper: Vec<_> = 'fi'.to_uppercase().collect();
println!("{:?}", fi_upper); // prints: ['F', 'I']
'fi'连字是一个单一字符,其大写版本由两个字母/字符组成。
如何处理这个问题有多种可能性:
&str
:如果您的数据实际上是字符串形式,请使用str::to_uppercase
返回String
,这样更容易使用。std::ascii::AsciiExt::to_ascii_uppercase
}}。但它只会将字母char
更改为'a'
并忽略所有其他字符! 'z'
或String
。 答案 1 :(得分:9)
ToUppercase
是一个迭代器,因为某些Unicode字符的大写版本可能更多,因为该字符的大写版本可能由多个代码点组成,如delnan所指出的那样评论。您可以将其转换为字符向量:
c.to_uppercase().collect::<Vec<_>>();
然后,你应该将这些字符收集到一个字符串中,就像ker指出的那样。