我在 C++ 中有以下一段代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
wstring ws1 = L"Infinity: \u2210";
wstring ws2 = L"Euro: €";
wchar_t w[] = L"Sterling Pound: £";
wfstream out("/tmp/unicode.txt");
out.write(ws1.c_str(), ws1.size());
out << ws1 << endl << ws2 << endl << w << endl;
out.flush();
out.close();
}
程序编译没有问题,但文件永远不会打开,更不用说写了。此外,如果我使用
std::wcout
我仍然没有得到正确的输出,只是 ?
用于无穷大和磅符号。我的系统是 g++ 4.4.3,运行 ubuntu linux 10.4 64 位。
最佳答案
始终首先设置语言环境……执行 locale::global( locale( "" ) );
。在此之前,您处于纯 C 模式,它对 UTF-8 一无所知。
在达尔文,这坏了,所以我需要做 setlocale( LC_ALL, "" );
,但是你的程序对我有用。
编辑
哎呀,你一下子被两个陷阱咬了。使用默认的 openmode 打开 wfstream
不会创建文件。在运行您的程序之前,我无意中将其修复为 wofstream
,然后忘记了。对不起。所以:
wofstream out("/tmp/unicode.txt");
或者
wfstream out("/tmp/unicode.txt", ios::in | ios::out | ios::trunc );
关于c++ - wfstream 不写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3857390/