2012-03-17 56 views
2

我試圖在Xcode 4.2運行該代碼的打擊:如何使用wstring和wcout在Xcode中輸出中文單詞?

int main(int argc, const char * argv[]) 
{ 
    locale loc("chs"); 
    locale::global(loc); 

    wstring text(L"你好"); 
    wcout << text << endl; 
    return 0; 
} 

我得到一個錯誤 「主題1:信號SIGABRT」。

你能告訴我爲什麼會發生錯誤或者如何使用wstringwcout來輸出中文單詞嗎?

+0

@CarlNorum:什麼是回溯?我在哪裏可以找到它? – 2012-03-17 22:20:25

+1

聽起來像你需要學習使用[調試器](http://en.wikipedia.org/wiki/Debugger)。 – 2012-03-17 22:20:53

+0

@CarlNorum:我通常使用VS調試器。我想你是指VS調試中的「調用堆棧」? – 2012-03-17 22:24:50

回答

6

你不知道。與其他Unix系統一樣,Mac在Windows使用「Unicode」(UTF-16)時使用UTF8。

您可以使用stringcout而不是wstringwcout在Mac上完美地打印。

附錄

此示例很好。用g ++編譯並按原樣運行。

#include <string> 
#include <iostream> 

using namespace std; 

int main(int arg, char **argv) 
{ 
    string text("漢語"); 
    cout << text << endl; 

    return 0; 
} 
+1

+1我認爲你應該被授予*正確答案*! – trojanfoe 2012-03-17 23:15:18

+0

沒問題。你的回答幾乎完全相同,不用擔心。 – 2012-03-18 07:37:47

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 
你好 

編輯:哎呀,太晚:)

+0

我們的開發團隊放棄了在OS X上使用語言環境管理。OS X(不同於現在的所有其他操作系統)是在後unicode世界中創建的。你不需要大驚小怪,也不必擔心設置區域設置和編碼......但是如果你的軟件已經這樣做了,那麼它有可能會因爲區域設置庫的變化而崩潰......越野車。 – 2012-03-17 22:47:56

+0

@ MahmoudAl-Qudsi本地化是我認爲講英語的開發人員(像我一樣)覺得很困難;我們再也不能假設整個世界都會說英語:)即使你掌握了技術,它也不是任何發展的簡單方面;您仍然需要僱員將您的產品翻譯成其他語言。這是我正要面對自己,有些恐懼...... – trojanfoe 2012-03-17 23:00:37

+0

當我說「語言環境管理」時,我只提到C/C++/System語言環境設置。 – 2012-03-17 23:12:32

相關問題