参考 http://www.fileformat.info/info/unicode/char/2192/index.htm表示unicode字符集中的右箭头为0x2192,因此我尝试以几种不同的方式将值写入文件:
#include <fstream>
using namespace std;
int main()
{
ofstream out("out.txt");
wofstream wout("wout.txt");
out << '0x2192' << endl;
out << '\u2192' << endl;
out << L'\u2192' << endl;
out << u'\u2192' << endl;
wout << '0x2192' << endl;
wout << '\u2192' << endl;
wout << L'\u2192' << endl;
wout << u'\u2192' << endl;
return 0;
}
它只打印数字而没有箭头符号。我究竟做错了什么? PS我还想稍后回读这个角色。提前谢谢。
答案 0 :(得分:3)
经过一些修改:
#include <fstream>
#include <locale>
using namespace std;
int main() {
// This is the real trick, make the wfostream to print wide characters as
// UTF-8
// what we're going to do is to create a locale that has the ctype category
// copied from the "en_US.UTF-8"
std::locale loc=std::locale(std::locale(),"en_US.UTF8",std::locale::ctype);
ofstream out("out.txt");
// and now add the locale to the stream
out.imbue(loc);
wofstream wout("wout.txt");
// and now add the locale to the stream
wout.imbue(loc);
//out << '0x2192' << endl; // character constant too long (did not compile on g++)
//out << '\u2192' << endl; // character constant too long (did not compile on g++)
out << L'\u2192' << endl; // prints 8594
out << u'\u2192' << endl; // prints 8594
out << (wchar_t) L'\u2192' << endl; // prints 8594
out << (wchar_t) u'\u2192' << endl; // prints 8594
//wout << '0x2192' << endl; // character constant too long
//wout << '\u2192' << endl; // character constant too long
wout << 8594 << endl; // prints 8594
wout << L'\u2192' << endl; // prints ->
wout << u'\u2192' << endl; // prints 8594
wout << (wchar_t) 8594 << endl; // prints ->
wout << (wchar_t) L'\u2192' << endl; // prints ->
wout << (wchar_t) u'\u2192' << endl; // prints ->
return 0;
}
以上是在Ubuntu linux上执行的,并用g ++编译