Перед тем, как можно даже начать задачу создания текстовых файлов, содержащих не латинские символы, вы должны определить, какую кодировку использовать для вашей местности.
Например, если ваш язык использует кодировку UTF-8
, строка «русский» должна быть закодирована совершенно иначе, чем если бы ваш язык был KOI8-R
.
Строка «русский» в UTF-8
представлена октетами (байтами): d1 80 d1 83 d1 81 d1 81 d0 ba d0 b8 d0 b9
. Для локали KOI8-R
эквивалентными октетами являются d2 d5 d3 d3 cb c9 ca
.
Интернационализация сложная.
В большинстве случаев вы можете быть в состоянии использовать широкий характер библиотеки C++ потоки с юникодом:
#include <iostream>
#include <locale>
int main()
{
std::locale::global(std::locale(""));
std::wcout << L"\u0440\u0443\u0441\u0441\u043a\u0438\u0439" << std::endl;
return 0;
}
Будем надеяться, что выход из этого будет «русский», на вашей платформе. Если это работает, это может быть путь наименьшего сопротивления, но вам придется искать значения юникода для каждого символа.
Существует также поддержка UTF-8
в новом стандарте C++, но здесь вы должны провести некоторое время, просвещая себя об общих концепциях языка, юникода и интернационализации. Это будет трудно сделать правильно, без полного понимания того, как все это работает.
Как вы написали файл? Если вы используете 'wchar_t *' или 'std :: wstring', вы должны использовать' std :: wofstream'. – NathanOliver
Я пробовал, но не из комбинаций. Итак, вы предлагаете сохранить его как wstring и использовать wofstream? Если да, то он ничего не пишет в файле – mbaros
Как закодирован исходный файл? utf8, Latin-1, ...? – Jarod42