fork download
  1. fn main() {
  2. let f = |v| String::from_utf8(v).map(|s| s.chars().map(|c| c as u32).collect::<Vec<u32>>());
  3. let g = |v: Vec<_>| {
  4. print!("{:?}\n=> ", v.iter().map(|b| format!("{:X}", b)).collect::<Vec<_>>());
  5. match f(v) {
  6. Ok(cs) => println!("{:?}\n", cs.iter().map(|c| format!("U+{:04X}", c)).collect::<Vec<_>>()),
  7. Err(e) => print!("{:?}\n", e.to_string())
  8. }
  9. };
  10. g(vec!(0x6F, 0x64, 0x61, 0x69));
  11. g(vec!(0xE3, 0x81, 0x8A, 0xE9, 0xA1, 0x8C));
  12. g(vec!(0xC2, 0xA9, 0xF0, 0x9F, 0x8D, 0x94, 0xE9, 0xA6, 0x99, 0x41));
  13. g(vec!(0xC2, 0xA9, 0xF0));
  14. }
  15.  
Success #stdin #stdout 0s 14912KB
stdin
Standard input is empty
stdout
["6F", "64", "61", "69"]
=> ["U+006F", "U+0064", "U+0061", "U+0069"]

["E3", "81", "8A", "E9", "A1", "8C"]
=> ["U+304A", "U+984C"]

["C2", "A9", "F0", "9F", "8D", "94", "E9", "A6", "99", "41"]
=> ["U+00A9", "U+1F354", "U+9999", "U+0041"]

["C2", "A9", "F0"]
=> "invalid utf-8: invalid byte near index 2"