我尝试在Xcode 4.2中运行代码:
int main(int argc, const char * argv[])
{
locale loc("chs");
locale::global(loc);
wstring text(L"你好");
wcout << text << endl;
return 0;
}
我收到错误“Thread 1:signal SIGABRT”。
您能告诉我错误发生的原因或如何使用wstring
和wcout
输出中文字词吗?
答案 0 :(得分:6)
你没有。与其他Unix系统一样,Mac使用UTF8,而Windows使用“Unicode”(UTF-16)。
您可以使用string
和cout
代替wstring
和wcout
在Mac上完美打印。
附录
此示例效果很好。用g ++编译并按原样运行。
#include <string>
#include <iostream>
using namespace std;
int main(int arg, char **argv)
{
string text("汉语");
cout << text << endl;
return 0;
}
答案 1 :(得分:1)
崩溃来自locale()
。这SO answer似乎很相关。
如Mahmoud Al-Qudsi所述,您不需要它,因为您可以在普通string
对象中使用UTF-8:
#include <string>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
string text("你好");
cout<<text<<endl;
return 0;
}
产地:
$ ./test
你好
编辑:糟糕,为时已晚:)