2012-09-13 70 views
0

一切,我想這樣做只是爲純文本的輸出一行:C++多國語言的字符串輸出

#include <iostream> 
#include <string> 

int main(void) 
{ 
    std::wstring d=L"string_contains_many_languages_German_Mädchenß_Russian_этотязык_and_ブリザンメント"; 
    std::wcout<<d<<"\n"; 

    return 0; 
} 

我聽說過的語言環境。但是如果我有多語言用戶呢?所以,我不能只堅持一個地區。

它既不能在Linux/Ubuntu中使用g ++編譯器也不能在Windows XP中正常工作。

我懷疑這可能不僅取決於C++,還取決於顯示此信息和環境的終端。 在Linux中,我可以使用命令touch「ブリザаäЯ」(tilda終端)創建名稱爲文件的文件。

我不知道是否有可能至少要創建一個名稱的文件,我在像d使用C(代碼)++字符串意味着

更正:

而且我想做的事情在Windows和Linux上的這些操作

+1

在Linux上,文件名是沒有語義不透明的字節序列(簡稱作爲API的空值終止字符串傳遞)。在Windows中,文件名是16位整數的不透明序列,通常假定(但不是必需)構成UTF-16代碼單元。也許[這個小咆哮](http://stackoverflow.com/q/6300804/596781)我的也很有用。 –

+3

這不是一個區域設置問題。區域設置包含諸如小數如何在不同國家表示的方面。你所指的是Unicode與ASCII。你想要做的就是寫出Unicode字符,因此'wstring'中的'w'表示寬字符表示。 – Steztric

+0

「它既不能正常工作」。當你嘗試時發生了什麼?它應該在這兩種環境中正常工作。 –

回答

0

在Windows上,您應該能夠將其寫爲文字,以UTF-8保存文件(因爲大多數源代碼文件已保存),然後在之前執行nowide的widen(字符串)輸出。它會工作。

你不想用UTF-16中的文字保存你的源代碼。另一種方法不是將字符串存儲在文字中,而是放在一個單獨的位置,並且定義好的編碼不會隨着IDE中按鈕的點擊而改變。

1

作爲一般規則,wchar_t在非Windows平臺上毫無意義。在Linux上這工作正常:

#include <iostream> 
#include <string> 

int main(void) 
{ 
    std::string d = "Mädchenß_этотязык_ブリザンメント"; 
    std::cout << d << "\n"; 
} 

,只要你不使用,它使用比UTF-8編碼的某處其他一些古老的配置。

事情是在Windows上更難有很多原因,但這裏有一個方法:

#include <iostream> 
#include <string> 
#include <io.h> 
#include <fcntl.h> 

int main(void) 
{ 
    _setmode(_fileno(stdout), _O_U16TEXT); 
    std::wstring d = L"Mädchenß_этотязык_ブリザンメント"; 
    std::wcout << d << "\n"; 
} 
+0

有趣,感謝與Linux。但我在Windows中得到了這個:http://imm.io/EiIX - 即只有德語顯示正確 – Tebe

+0

我忘記了控制檯仍然有光柵字體。您需要切換到其中一種TTF字體。 Lucida Console或Consolas應該可用。日語將顯示爲框,但正確的字符仍然存在(您可以通過從控制檯複製並粘貼到記事本來顯示它)。 – bames53

+0

你的意思是Windows控制檯?使用我的程序發佈+1應用程序時會出現一些問題 – Tebe