dmc1989
@dmc1989

Как перевести строку бинарного файла в UTF8?

Получаю текст бинарного файла, с которым мне нужно дальше работать, но для этого мне нужно перевести его в utf-8.

Вот что получаю.
$y„‘р{Ы©ё¤LR5cЧzМїyх<]Aґ›ЌI:\д:ЮТ«уг€сa=-‚ЬьEo"жвпйЅз‡µ^†
7hпw(%аoWм¶\($¬ѕн™…<„м±яlЮФЎ‹Жж
rоЬ:пеNМпчШЅЃ6Еv8уoФj¦¬ТИмб`%ї·}•т+‡CэЪG¤Ч;fЈИXxш¶BЭц	є›ЪКГ


Есть ли способ перевести эту сторку в нормальный формат, ну, или прочитать ее побитово, чтобы вручную все сделать?
Пытался прочитать побитово, но вот оригинальный файл весит 500 байт, а когда перевел, то получил 250 байт. В с++ еще очень зеленый прошу сильно не ругать. Уже второй день сижу тут туплю, буду рад всем советам.
Читаю таким способом:
std::ifstream f(this->file_path, ios::binary);
        f.seekg(0, std::ios::end);
        size_t size = f.tellg();
        std::string s(size, ' ');
        f.seekg(0);
        f.read(&s[0], size);
        return s;

Тут пытался побайтовов вывести:
std::ifstream in(filename.c_str(), ios::in | ifstream::binary);
    char tmp;
    if (in) {
        size_t count = 0;
        while (!in.eof()) {
            in.read(&tmp, 1);
            std::cout << std::hex << std::setfill('0') << std::setw(2)
                << static_cast<unsigned int>(static_cast<unsigned char>(tmp));
            ++count;
            if (count % 4 == 0)
                std::cout << ' ';
            if ((count % 20) == 0)
                std::cout << std::endl;
            if (count >= 120)
                break;
        }
        in.close();
    }
    else {
        std::cerr << "Oops: cant open file" << std::endl;
    }
  • Вопрос задан
  • 838 просмотров
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
Ты не в С++ еще очень зеленый, а в информатике в целом.
Упорно долбишься в принципиально неверно поставленную цель.
Единственный способ, которым ты можешь наглядно отобразить бинарную информацию и ничего не потерять - это hexdump (отображение каждого символа его шестнадцатеричным кодом). Собственно, все так и делают еще с прошлого века.
Аналогично, работа с бинарными данными принципиально отличается от работы со строками. Ты получаешь байты и обрабатываешь байты. Если какой-то кусок этих байтов выстраивается в строку в какой-то кодировке - копируешь этот кусок, присваиваешь его строке, и тогда уже можно использовать библиотеки, перекодирующие из одной кодировки в другую. Но пока у тебя файл, в котором навалено разных данных и служебной информации - разбирать его надо именно побайтово.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Не то вы делаете.
Ответы сервера нужно корректно обрабатывать
<html><body><h1>Whitelabel Error Page</h1><p>This application has no configured error view, so you are seeing this as a fallback.</p><div id='created'>Sat Apr 03 11:31:28 UTC 2021</div><div>[bfc6dfaa-25344] There was an unexpected error (type=Internal Server Error, status=500).</div><div></div></body></html>

Смотрите как декодировать это все, и смотрите на заголовки сервера, компрессия может быть не только gzip
https://developer.mozilla.org/ru/docs/Web/HTTP/Hea...

https://stackoverflow.com/questions/5929994/c-deco...
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Для начала поймите, в какой кодировке исходный файл. Он точно содержит текст?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы