Я написал переводчик из десятичного числа в символы Юникода.
Во входном файле у нас есть несколько чисел, которые после перевода выдадут какой-то символ. Например, знак евро, представленный вначале как 226 130 172, будет выглядеть точно так же, как знак евро. Проблема в том, что я не могу вывести это в файл, но могу вывести в консоль. В программе есть метод с расширенным fstream, он позволяет выводить в консоль символы размером до 4 байт. Но в выходном файле ничего нет, и я не понимаю почему. Мой друг использует какой-то способ вывода, перенаправляя обычный поток cout в файл, но, как я понимаю, этот способ будет работать только на винде. Я использую Ubuntu 16.04, этот метод у меня не работает. Я попытался настроить gedit (стандартный текстовый редактор в Ubuntu) для отображения, но мне это не удалось. В этом коде я сначала открываю расширенные потоки, а потом идет следующий код.
int input, result = 0;
if(!fin.is_open()){
cout << "Не удалось открыть файл!" << endl;
}
else{
while(fin >> input){
if(input >= 240){
input -= 240;
result += input << 18;
fin >> input;
input -= 128;
result += input << 12;
fin >> input;
input -= 128;
result += input << 6;
fin >> input;
input -= 128;
result += input;
wcout << (wchar_t)result << endl;
fout << (wchar_t)result;
}
else if(input >= 224){
input -= 224;
result += input << 12;
fin >> input;
input -= 128;
result += input << 6;
fin >> input;
input -= 128;
result += input;
wcout << (wchar_t)result << endl;
fout << (wchar_t)result;
}
else if(input >= 192){
input -= 192;
result += input << 6;
fin >> input;
input -= 128;
result = input;
wcout << (wchar_t)result << endl;
fout << (wchar_t)result;
}
else{
wcout << (wchar_t)input << endl;
fout << (wchar_t)input;
}
}
}
fin.close();
fout.close();
return 0;
}