БлогNot. Studio: читаем файл в кодировке Юникода UTF-8

Studio: читаем файл в кодировке Юникода UTF-8

В этой заметке мы прочитаем текстовый файл из консольного приложения Visual Studio 2019 на C++ посимвольно и целиком.

Везде предполагается, что читаем из текущей папки, при запуске приложения из среды в режиме отладки это будет та же папка, где помещается файл с текстом программы, при отдельном запуске исполняемого exe-файла, соответственно, его папка. Файл с именем input.txt имеет произвольное содержимое, но сохранён в кодировке Юникода UTF-8.

1. Читаем файл посимвольно. Учитывая, что полноценной поддержки Юникода в консоли Visual C++ нет, получится так:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <clocale>
#include <wchar.h>
#include <io.h>
#include <fcntl.h>

int main () {
 char *locale = setlocale(LC_ALL, "ru_RU.utf8"); //русская локаль для Юникода
 _setmode(_fileno(stdout), _O_U16TEXT); //Ставим режим консоли
 FILE *in;
 fopen_s (&in,"input.txt", "r"); //Studio считает fopen устаревшей
 wint_t c;
 while ((c = fgetwc(in)) != WEOF) {
  wprintf(L"%c", c);
  //или: putwchar(c);
 }
 fclose(in);
 return EXIT_SUCCESS;
}

2. Читаем этот же файл целиком.

#include <iostream>
#include <sstream>
#include <fstream>
#include <codecvt>
#include <io.h>
#include <fcntl.h>

int main () {
 _setmode(_fileno(stdout), _O_U16TEXT);

 std::wifstream infile("input.txt");
 if (infile) {
  infile.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
  std::wstringstream wss;
  wss << infile.rdbuf();
  std::wcout << wss.str();
 }
 infile.close();
 return 0;
}

Сам файл находился в одной папке решения с файлом исходного текста main.cpp:

файл в папке и его содержимое
файл в папке и его содержимое

09.11.2020, 13:54 [1301 просмотр]


теги: учебное textprocessing c++ studio

К этой статье пока нет комментариев, Ваш будет первым