Fix formatting of paths containing invalid Unicode

This commit is contained in:
Victor Zverovich 2023-05-07 08:05:28 -07:00
parent dde8cf3bb7
commit 1e0ce567ef
2 changed files with 9 additions and 12 deletions

View File

@ -2027,16 +2027,14 @@ auto write_escaped_cp(OutputIt out, const find_escape_result<Char>& escape)
*out++ = static_cast<Char>('\\');
break;
default:
if (is_utf8()) {
if (escape.cp < 0x100) {
return write_codepoint<2, Char>(out, 'x', escape.cp);
}
if (escape.cp < 0x10000) {
return write_codepoint<4, Char>(out, 'u', escape.cp);
}
if (escape.cp < 0x110000) {
return write_codepoint<8, Char>(out, 'U', escape.cp);
}
if (escape.cp < 0x100) {
return write_codepoint<2, Char>(out, 'x', escape.cp);
}
if (escape.cp < 0x10000) {
return write_codepoint<4, Char>(out, 'u', escape.cp);
}
if (escape.cp < 0x110000) {
return write_codepoint<8, Char>(out, 'U', escape.cp);
}
for (Char escape_char : basic_string_view<Char>(
escape.begin, to_unsigned(escape.end - escape.begin))) {

View File

@ -30,8 +30,7 @@ TEST(std_test, path) {
L"\x0428\x0447\x0443\x0447\x044B\x043D\x0448"
L"\x0447\x044B\x043D\x0430")),
"\"Шчучыншчына\"");
// EXPECT_EQ(fmt::format("{}", std::filesystem::path(L"\xd800")),
// "\\x{d800}");
EXPECT_EQ(fmt::format("{}", std::filesystem::path(L"\xd800")), "\"\\ud800\"");
# endif
}