diff --git a/src/de.rs b/src/de.rs index ffd0d48c2..9c33e789e 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1342,9 +1342,15 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer { b'"' => { self.eat_char(); self.scratch.clear(); - match tri!(self.read.parse_str(&mut self.scratch)) { - Reference::Borrowed(s) => visitor.visit_borrowed_str(s), - Reference::Copied(s) => visitor.visit_str(s), + match tri!(self.read.parse_str_raw(&mut self.scratch)) { + Reference::Borrowed(s) => match std::str::from_utf8(s) { + Ok(s) => visitor.visit_borrowed_str(s), + Err(_) => visitor.visit_borrowed_bytes(s), + }, + Reference::Copied(s) => match std::str::from_utf8(s) { + Ok(s) => visitor.visit_str(s), + Err(_) => visitor.visit_bytes(s), + }, } } b'[' => {