Rust是否提供了从&[u8]
解码单个字符(确切地说是unicode-scalar-value)的方法,该字符可能是多个字节,返回单个USV?< / p>
像GLib的g_utf8_get_char
&amp; g_utf8_next_char
:
// Example of what glib's functions might look like once ported to Rust.
let i = 0;
while i < slice.len() {
let unicode_char = g_utf8_get_char(&slice[i..]);
// do something with the unicode character
funcion(unicode_char);
// move onto the next.
i += g_utf8_next_char(&slice[i..]);
}
除了将一些GLib API移植到Rust之外,Rust还提供了一种方法来实现这一点,除了一些试验和错误调用from_utf8
,一旦到达第二个字符就会停止?
请参阅GLib's code。
答案 0 :(得分:2)
不,从Rust 1.14开始,Rust标准库中没有公开这样的功能。
并且都不应该。 Rust在一个巨大的标准库中不会相信。使用Crates是微不足道的,可以防止人们重写代码。许多人的意见不正确(是的,这是正确的:意见不正确),使用依赖关系会使他们的程序变弱。
标准库中的任何内容都必须保持永久。对于破坏向后兼容性的Rust 2.0没有零计划。 Python就是这里的常见示例,标准库中存在大量“从URL获取数据”部分,这些部分都是冗余的,现在已弃用。 Python维护者不得不浪费时间来保持这些工作,而不是推进语言。
第三方包装箱允许在不增加整个语言负担的情况下创建,发展和消亡。
答案 1 :(得分:0)
您可以使用str::from_utf8
将字节切片(&[u8]
)转换为字符串切片(&str
)(请注意,这会验证整个字节切片是有效的UTF-8) 。然后,您可以使用字符串切片上的chars()
迭代器来迭代字符串中的每个字符(char
)。