Как открыть текстовый файл с кодировкой символов utf-16 LE, а затем преобразовать и сохранить тот же файл в utf 8, используя c ++ - PullRequest
0 голосов
/ 15 января 2020

Когда я попытался прочитать содержимое файла, используя код на С ++, он показал мне ненужные символы внутри моей переменной строки. Я очень уверен, что это потому, что файл сохранен в форме utf-16 LE. Я открыл файл вручную и сохранил его в utf-8, а затем с помощью кода на С ++ смог прочитать содержимое в моей переменной переменной. Таким образом, хочу функцию c ++, которая помогает мне открыть файл в utf-8

Код, который я попробовал:

include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <codecvt>
#include <cstdio>
#include <stdio.h>
#include <fcntl.h>
#include <iostream>
#include <fstream>
#include <locale>
#include <codecvt>

#include <sstream>
using namespace std;

int main() {
  //  std::ifstream fin("Export_20190715144621.txt", std::ios::binary);
    std::ifstream fin("Export_20190715144621.txt", std::ios::binary);

    //skip BOM
    fin.seekg(2);

    //read as raw bytes
    std::stringstream ss;
    ss << fin.rdbuf();
    std::string bytes = ss.str();

    //make sure len is divisible by 2
    int len = bytes.size();
    if (len % 2) len--;

    std::wstring sw;
    for (size_t i = 0; i < len;)
    {
        //little-endian
        int lo = bytes[i++] & 0xFF;
        int hi = bytes[i++] & 0xFF;
        sw.push_back(hi << 8 | lo);
    }

    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
    std::string utf8 = convert.to_bytes(sw);
    return 0;
}

Я не знаю, что не так с этим кодом, но я не удалось получить данные в строке utf8

...