如何将箭头符号写入文件,然后再将其读回

How do I write arrow symbol to a file and then read it back?

本文关键字:然后 文件 符号      更新时间:2023-10-16

引用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我还想稍后读回这个字符。提前谢谢。

经过一些修改:

#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++编译

相关文章: