Прочитать весь файл UTF-8 в std :: string - PullRequest
0 голосов
/ 09 апреля 2019

Я использовал следующее в файле ASCII:

#include <fstream>
#include <streambuf>
#include <string>
#include <cerrno>

std::string get_file_contents(const char *filename)
{
  std::ifstream in(filename, std::ios::in | std::ios::binary);
  if (in)
  {
    return(std::string((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()));
  }
  throw(errno);
}

Я хочу подтвердить, будет ли он работать для файла UTF-8, а также в std :: string или есть какие-то особые настройки?

1 Ответ

2 голосов
/ 09 апреля 2019

Хорошо читать все символы UTF-8, как это; В конце концов, это всего лишь последовательность байтов, и только при дальнейшей обработке, преобразовании или выводе текста вам необходимо убедиться, что кодировка принята во внимание.

Одна потенциальная ловушка - это спецификация (https://en.wikipedia.org/wiki/Byte_order_mark).. Если у вашего текстового файла есть спецификация, вы можете вручную удалить ее из строки или обработать ее соответствующим образом. Не нужно использовать эту спецификацию. с UTF-8, но некоторые программы в любом случае делают это, чтобы различать типы кодирования, предположительно. Notepad в Windows сохраняет BOM, например (пусть Notepad сохранит файл с кодировкой UTF-8 и откроет файл в двоичном редакторе, чтобы проверить его) ).

...