将包含Unicode编号的字符串解析为相应的Unicode字符?

时间:2016-10-15 05:22:10

标签: rust

有没有这样的功能:

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经验,所以欢迎任何想法。

3 个答案:

答案 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();