diff --git a/src/display.rs b/src/display.rs index f563b77..0a41e2a 100644 --- a/src/display.rs +++ b/src/display.rs @@ -49,6 +49,9 @@ fn write_str(f: &mut fmt::Formatter, s: &str) -> fmt::Result { '\u{d}' => try!(write!(f, "\\r")), '\u{22}' => try!(write!(f, "\\\"")), '\u{5c}' => try!(write!(f, "\\\\")), + c if c < '\u{1f}' => { + try!(write!(f, "\\u{:04}", ch as u32)) + } ch => try!(write!(f, "{}", ch)), } } diff --git a/src/lib.rs b/src/lib.rs index e8dcb92..74fe1b8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -489,4 +489,10 @@ mod tests { assert_eq!(Value::Integer(0), *value.lookup("table.\"element\".\"value\".0").unwrap()); } + #[test] + fn control_characters() { + let value = Value::String("\x05".to_string()); + assert_eq!(value.to_string(), r#""\u0005""#); + } + }