Может ли wstring_convert просто заменить недопустимые символы?

В настоящее время я работаю над инструментом для извлечения архивов из игры с целью интеллектуального анализа данных. В настоящее время я извлекаю метаданные из архивов (количество файлов в архиве, имена файлов, упакованные / распакованные размеры и т. Д.) И записываю их в std::wstring для дальнейшего анализа. Я наткнулся на проблему с преобразованием имен файлов в широкие символы, используя std::wstring_conver,

Мой код выглядит примерно так:

struct IndexEntry {
    int32_t file_id;
    std::array<char, 260> filename;
    // more fields
}

wstring foo(IndexEntry entry) {
    std::wstringstream buffer;
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
    buffer << entry.file_id << L'\n';
    buffer << converter.from_bytes(entry.filename.data()) << L'\n';
    // add rest of the IndexEntry fields to the stream
    return buffer.str();
}

Структура IndexEntry заполняется чтением из файлов с std::ifstream в двоичном режиме. Ошибка происходит с converter.from_bytes(), Некоторые имена файлов содержат символ 0x81, и когда конвертер встречает их, он выдает std::range_error исключение.

Есть ли способ сказать wstring_convert заменить символы, это не может преобразовать что-то еще? Или есть вообще лучший способ справиться с этим преобразованием?

Весь этот проект - в основном учебное упражнение. Я хотел выполнить всю внутреннюю обработку строк с помощью wstring, чтобы получить некоторый опыт работы со строками в разных кодировках. К сожалению, я не знаю, какая именно кодировка использовалась для создания этих архивных файлов.

0 ответов

Другие вопросы по тегам