Вывод символов Unicode в файл в Linux Ubuntu

Я написал переводчик с десятичного числа на символы Юникода.

Во входном файле у нас есть несколько чисел, которые после перевода выдают какой-то символ. Например, знак евро, представленный вначале как 226 130 172, будет выглядеть точно так же, как знак евро. Проблема в том, что я не могу вывести это в файл, но я могу вывести его на консоль. В программе есть метод с расширенным fstream, который позволяет выводить символы до 4 байтов на консоль. Но в выходном файле ничего нет, и я не понимаю, почему. Мой друг использует какой-то способ вывода, перенаправляя обычный поток cout в файл, но, как я понимаю, этот метод будет работать только в Windows. Я использую 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;
}

0

Решение

Вы должны объявить fout как std :: wofstream, а не std :: ofstream для вывода wchar в файл.
Пример:

wchar_t *temp = L"wchar";
std::wofstream wofs;
wofs.open("output.txt", std::ios::out);
wofs << L"Test\n";
wofs << temp;
wofs.close();

Вы можете сослаться на эту ссылку:Вывод ‘wchar_t *’ в ‘ofstream’

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]