我在 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/

10-11 16:23