有没有这样的功能:
fn string_to_unicode_char(s: &str) -> Option<char> {
// ...
}
fn main() {
let s = r"\u{00AA}"; // note the raw string literal!
string_to_unicode_char(s).unwrap();
}
请注意r"\u{00AA}"
使用raw string i。即它不是 Unicode序列,而是8个单独的符号,\
u
{
0
0
{{1} } A
A
。
我需要解释/转换/解析这个字符串,如果一切正常,则返回一个char,否则返回}
。我没有任何Unicode经验,所以欢迎任何想法。
答案 0 :(得分:2)
我确实完全误解了你的问题;我的旧回答可以在edit logs
中看到是否有内置函数将包含Rust unicode转义的字符串解析为相应的unicode字符?
AFAIK,没有,没有内置函数可以做到这一点。
“如何自己动手”的答案有点宽泛,因为有很多方法可以做到(并且不清楚你是否也想解析标准转义,例如"\n"
)。 / p>
答案 1 :(得分:1)
我相信您正在寻找的功能是char::from_u32
:
fn string_to_unicode_char(s: &str) -> Option<char> {
// Do something more appropriate to find the actual number
let number = &s[3..7];
u32::from_str_radix(number, 16)
.ok()
.and_then(std::char::from_u32)
}
fn main() {
let s = r"\u{00AA}"; // note the raw string literal!
let ch = string_to_unicode_char(s);
assert_eq!(ch, Some('\u{00AA}'));
}
答案 2 :(得分:0)
要从String
获取字符,可以使用chars()
方法获取字符上的迭代器:
let ch : char = s.chars().next().unwrap();