diff --git a/src/uucore/src/lib/features/format/argument.rs b/src/uucore/src/lib/features/format/argument.rs index 92d6c1603..ef81fc353 100644 --- a/src/uucore/src/lib/features/format/argument.rs +++ b/src/uucore/src/lib/features/format/argument.rs @@ -45,7 +45,7 @@ impl<'a, T: Iterator> ArgumentIter<'a> for T { }; match next { FormatArgument::Char(c) => *c, - FormatArgument::Unparsed(s) => s.chars().next().unwrap_or('\0'), + FormatArgument::Unparsed(s) => s.bytes().next().map_or('\0', char::from), _ => '\0', } } diff --git a/tests/by-util/test_printf.rs b/tests/by-util/test_printf.rs index a288d7c08..4f2e1dc10 100644 --- a/tests/by-util/test_printf.rs +++ b/tests/by-util/test_printf.rs @@ -644,3 +644,8 @@ fn partial_char() { "printf: warning: bc: character(s) following character constant have been ignored\n", ); } + +#[test] +fn char_as_byte() { + new_ucmd!().args(&["%c", "🙃"]).succeeds().stdout_only("ð"); +}