C/C++

C++ библиотека fstream. при использовании Кириллицы изменяется кодировка в создаваемом файле..

В общем пишу консольную программу, которая список номеров (для приборов) записанных в строку закидывает в таблички. Которые создаются разметкой html, (ну программа вставляет куски кода html, потом сам номер, ну и сохраняет в текстовой фаил!таким образом создаются таблички..) Ну если фаил сохранить в формате html, и поменять кодировку на ASCII то получаются вполне нормальные таблички! как в первой картинке.. Но проблема в том что если в номере есть символ из кирилицы, то получаются каракули! и кодировку хоть меняй не меняй все ровно... вот на 2й картинке...

не подскажете как быть? номеров с кирилицей много...
Aliheyder Memmedov
Aliheyder Memmedov
975
Нужно работать с кодировкой UTF-8 и в консоли и в HTML

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
bool writer(const wstring path, const vector<wstring>& content) {
wofstream stream(path);
stream.imbue(locale(".UTF-8"));
if (stream.is_open() && !stream.bad()) {
for (const auto& line : content) stream << line << L'\n';
stream.close();
return true;
}
return false;
}
vector<wstring> reader(const wstring path) {
vector<wstring> content;
wifstream stream(path);
stream.imbue(locale(".UTF-8"));
if (stream.is_open() && !stream.bad()) {
wstring line;
while (getline(stream, line)) content.emplace_back(line);
stream.close();
}
return content;
}
void test(wstring&& str) {
vector<wstring> content;
content.emplace_back(move(str));
wstring line;
wcout << L"Введите пару строк на русском языке: \n";
for (auto i = 0U; i < 2; ++i) {
getline(wcin, line);
content.emplace_back(line);
}
wcout.put(L'\n');
wstring path = LR"(D:\content.txt)";
if (writer(path, content)) {
auto result = reader(path);
if (result.empty()) wcout << L"Информация не найдена! \n";
else for (const auto& line : result) wcout << line << L'\n';
}
else wcout << L"Ошибка записи в файл. \n";
}
int main() {
wcout.imbue(locale(".OCP"));
wcin.imbue(locale(".OCP"));
const wchar_t* message = L"Этот текст на русском языке:";
test(wstring(message));
wcout << LR"(Ура! Работает!
Откройте в Notepad++ файл D:\content.txt)";
wcout.put(L'\n');
system("pause");
}

Для поддержки русского языка в HTML

<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Документ</title>
</head>
<body>

</body>
</html>
Maks )))
Maks )))
84 068
Лучший ответ