У меня есть приложение, которое сканирует пути к папкам и представляет их пользователю.Я давно использую простую утилиту для преобразования из UTF-8 в широкие строки.Это сработало очень хорошо.Но сегодня он начал выдавать исключение, и мне нужно выяснить, что делать.
Это функция.
inline std::wstring convertutf8(const std::string& p)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> wconv;
return wconv.from_bytes(p.c_str());
}
Сегодня утилита впервые попыталась преобразовать эту строку иthew исключение
I: \ Scans \ Nouvelles numérisations
Этот путь к папке был создан, когда я запустил французскую версию какого-либо другого приложения и что-то сохранил в папкечто мое приложение сканирует.(Я работаю в системе с английским-американским языком в качестве локали).
Этот путь заставил стандартную библиотеку C ++ выдать исключение range_error (с текстом «плохое преобразование» в качестве текста) изнутри функции from_bytesстандартная библиотека, кажется, не может преобразовать символ с символом ударения ...
é
Я вижу несколько способов справиться с ситуацией, в том числеперехват исключения (и возврат "") или, возможно, возвращение строки ошибки по умолчанию в таком случае.(wstring_convert имеет средство для этого в конструкторе).Но мне нужно понять это лучше.
Я безрассудно надеялся, что использование wstring_convert с codecvt_utf8 позволит мне справиться с такими ситуациями.До сих пор мое приложение, похоже, правильно обрабатывало даже китайские пути с апломбом.Поэтому я удивлен, что это доставляет мне неприятности
Когда я смотрю на текст проблемного символа в отладчике (и тех, кто его окружает), я вижу следующее
CHAR DEC HEX
---- --- ----
'n' 110 0x6e
'u' 117 0x75
'm' 109 0x6d
'é' -23 0xe9
'r' 114 0x72
'i' 105 0x69
Doэти цифры представляют "правильное" представление UTF-8?Я бы даже не знал.Интернационализация мне не подходит.
Я что-то здесь не так делаю?Отсутствует что-то простое?Это часть приложения, которое сканирует папки и представляет их пользователю для навигации.Я хотел бы иметь возможность обрабатывать случай пути с такими символами, правильно конвертировать их и продолжать.
Может ли кто-нибудь дать мне некоторые указания относительно того, что я должен сделать в этом случае, чтобы иметь возможность обрабатывать такой путь в английской системе?