我写了一个从十进制数到Unicode字符的翻译器。
在输入文件中,我们有几个数字,在翻译后会给出一些字符。例如,欧元符号(一开始表示为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 :(得分: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();
您可以参考以下链接:Outputting 'wchar_t*' to an 'ofstream'