我有一个Unicode字符的十六进制值。如何在Rust中将其转换为char
?char::from_u32()
不工作,因为char
似乎不包含十六进制值:
fn main() {
let code_point: u32 = 0xf09f8cb8; //emoji '🌸'
println!("{}", code_point); //=> 4036988088
let c = '🌸';
println!("{}", c as u32); //=> 127800 (not 4036988088)
}
2条答案
按热度按时间jdg4fx2g1#
正如其他人所指出的,
u32
值不是一个代码点,而是一个UTF-8字节序列(当被视为big-endian时)。您可以通过组合
u32::to_be_bytes()
和std::str::from_utf8()
将此值转换为字符串:tgabmvqs2#
您的代码将十六进制值视为Unicode码位,但它们实际上是emoji的UTF-8编码。要对其进行解码,请将字节存储为字节字符串并调用
std::str::from_utf8
。输出:
Playground