Коллеги, помогите, пожалуйста.
Задача — есть файл, в нём хранятся строки, которые могут состоять из букв не только латинского, но и практически любого другого алфавита (например, русского или китайского). Их необходимо прочитать, после чего, предположим, передать через API в некоторую другую систему C-строку, полученную при помощи вызова функции-члена c_str, а также записать в другой файл.
В качестве примера рассмотрим лишь запись в другой файл:
#include <boost/filesystem.hpp>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
int main()
{
try
{
boost::filesystem::path input_path("./input.txt");
std::ifstream f_in(input_path.string());
if (!f_in)
{
std::cerr << "An error occurred while opening file " << input_path.string() << '\n';
return EXIT_FAILURE;
}
std::string str;
f_in >> str;
if (!f_in)
{
std::cerr << "An error occurred while reading string from file " << input_path.string() << '\n';
return EXIT_FAILURE;
}
boost::filesystem::path output_path("./output.txt");
std::ofstream f_out(output_path.string());
if (!f_out)
{
std::cerr << "An error occurred while creating / opening file " << output_path.string() << '\n';
return EXIT_FAILURE;
}
f_out << str;
if (!f_out)
{
std::cerr << "An error occurred while writing string to file " << output_path.string() << '\n';
return EXIT_FAILURE;
}
}
catch (const boost::filesystem::filesystem_error& ex)
{
std::cerr << "An error occurred while constructing boost::filesystem::path object - " << ex.what() << '\n';
return EXIT_FAILURE;
}
}
Предположим, что файл ./input.txt сохранён в кодировке ANSI.
Если в файле ./input.txt содержится строка "str", то всё, разумеется, нормально — в файле ./output.txt оказывается точно такая же строка. Если там содержится строка "строка", то всё тоже нормально. Это и должно быть так? Или это получилось так лишь в моём случае и полагаться на это не стоит? Если первое, то почему? Если второе, то что делать в подобной ситуации? Сохранять файл в кодировке UTF-8 или UTF-16? Как тогда его наиболее грамотно считывать?
Кстати, скопировать китайские слова из буфера обмена в файл ./input.txt, сохранённый в ANSI, у меня так и не получилось. Я так понимаю, и не получится?
Поясните, пожалуйста, человеческим языком. Туториалы в интернете смотрел, но там слишком много информации, в которой, честно говоря, я уже запутался.
Интересует, разумеется, наиболее кросс-платформенный метод. Если всё же такого не существует, то хотелось бы выслушать решения для наиболее популярных ОС, особенно Windows.